{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Transmittance Spectra for Planewave at Normal Incidence of a Binary Grating"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The mode-decomposition feature can also be applied to planewaves in homogeneous media with scalar permittivity/permeability (i.e., no anisotropy). This will be demonstrated in this example to compute the diffraction spectrum of a binary phase [grating](https://en.wikipedia.org/wiki/Diffraction_grating). To compute the diffraction spectrum for a finite-length structure, see [Tutorials/Near to Far Field Spectra/Diffraction Spectrum of a Finite Binary Grating](https://meep.readthedocs.io/en/latest/Python_Tutorials/Near_to_Far_Field_Spectra/#diffraction-spectrum-of-a-finite-binary-grating). \n",
    "\n",
    "In this example, we'll define a grating that is periodic in the $y$ direction with periodicity `gp` and has a rectangular profile of height `gh` and duty cycle `gdc`. The grating parameters are `gh`=0.5 μm, `gdc`=0.5, and `gp`=10 μm. There is a semi-infinite substrate of thickness `dsub` adjacent to the grating. The substrate and grating are glass with a refractive index of 1.5. The surrounding is air/vacuum. Perfectly matched layers (PML) of thickness `dpml` are used in the $\\pm x$ boundaries.\n",
    "\n",
    "We'll do our analysis first using an ideal quartz that ignores the dispersion of the material. Then we'll include the dispersion to detect any differences.\n",
    "\n",
    "A pulsed planewave with $E_z$ polarization spanning wavelengths of 0.4 to 0.6 μm is normally incident on the grating from the glass substrate. The eigenmode monitor is placed in the air region. We will use mode decomposition to compute the transmittance — the ratio of the power in the $+x$ direction of the diffracted mode relative to that of the incident planewave — for the first ten diffraction orders. \n",
    "\n",
    "Two simulations are required: (1) an empty cell of homogeneous glass to obtain the incident power of the source, and (2) the grating structure to obtain the diffraction orders. At the end of the simulation, the wavelength, angle, and transmittance for each diffraction order are computed.\n",
    "\n",
    "Initially, we'll import our standard libraries:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Using MPI version 3.1, 1 processes\n"
     ]
    }
   ],
   "source": [
    "import meep as mp\n",
    "import math\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We first need to simulate the empty, homogenous glass (fuzed quartz) with a constant refractive index."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-----------\n",
      "Initializing structure...\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAG4CAYAAABfOXCLAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAASdAAAEnQB3mYfeAAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3dfXBlZ33Y8e8Pm5UZsSIB7DUsBpd1wC7MlDThNWDelh2XoRAYO1MKFGgzDEMomMyQJXGCJ+GloyZNePUfDqGkhSHYhNgkIUXjQqGUt8QhYJkl4DUxWDa7bDxFQrZ3FfH0D0lUFtere67Oc57nnP1+ZnZ2fXXP1WM99/6+Ole6UqSUkCRpq/uUXoAkqU4GQpI0koGQJI1kICRJIxkISdJIBkKSNJKBkCSNZCAkSSMZCEnSSKeXXkDtIuIBwNOB7wInCi9HknZiF3AO8JmU0g+2u7KB2N7TgWtLL0KSWvQC4OPbXclAbO+7ANdccw3nnXdekQWsrK5w8LqDzB2eY3rXNHum9/DxF2+7t/1x003wi7/4///7mmug0Mda3Rr61j//w88H4LwHnsfc4TkO7DvA7P5Z7nvafYus56J3XcStV94K63NtOwZieycAzjvvPB7zmMd0/s5XVld4ycdewtzSHJc84xLmj84TEUXW0pnzzoMh///pXg1t68946BncungrNy/dzCXPuIQPvehDxeIAsOvMXRv/HOvpcr9IXbGNOFz99au55J+v3bkiovSyJDWweHzxx4/fknGYhIGo1Kg49O3OJQlmpmZ6+/g1EBUyDtJw7N29t7ePXwNRGeMgDUufnxY2EBUxDpJyWVld4cjykUbHGIhKGAdJuWzMl+UTy42OMxAVMA6Sctk8X6Z3TTc61kAUZhwk5bJ1vuyZ3tPoeANRkHGQlMuo+dKUgSjEOEjKpa35YiAKMA6ScmlzvhiIjhkHSbm0PV8MRIeMg6RccswXA9ER4yApl1zzxUB0wDhIyiXnfDEQmRkHSbnkni8GIiPjICmXLuaLgcjEOEjKpav5YiAyMA6SculyvhiIlhkHSbl0PV8MRIuMg6RcSswXA9ES4yApl1LzxUC0wDhIyqXkfDEQO2QcJOVSer4YiB0ovXmShquG+WIgJlTD5kkaplrmi4GYQC2bJ2l4apovBqKhmjZP0rDUNl8GH4iIuCwiUkTM7/S2ats8ScNR43wZdCAi4mHAbwDLO72tGjdP0jDUOl9OL72AzH4P+CJwGvDgndzQwesOMrc0V9XmSeq/WuMAAz6DiIgLgYuBS9u4vbnDxkFSu2qOAww0EBFxGvBu4H0ppRvauM0D+w5Ut3mS+qv2OMBwn2J6NfAIYH+TgyLiLODMLRfvA5jdP1vd5knqpz7EAQYYiIh4EPA7wFtSSt9vePhrgMtHvaHGzZPUP32JAwwwEMBbgTtYe4qpqSuAq7dctg+4dqeLaktKiYgovQxJE+hTHGBggYiInwFexdoXph+6aZCeAdw3Is4FFlNKd4w6PqV0FDi65TZzLbexldUVFpYWeNjMw0ovRVJDfYsDDO+L1HtZ+396F/DtTX+eCDxq/d9vLra6Hdi4cy0eXyy9FEkN9TEOMLAzCGAeeOGIy98K7AZeDxzudEUt2HznmpmaKb0cSQ2klHoZBxhYIFJKx4Brtl4eEZeuv/0n3la7rZ95zB/d8U8MkdShhaUFDh071Ls4wPCeYhqUUaelNX1NRNL2Fo8v9jIOMLAziHuTUnpG6TU01dfnLCXd08zUTG8fv55BVMg4SMOxd/fe3j5+DURljIM0LH1+WthAVMQ4SMplZXWFI8tHGh1jICphHCTlsjFflk80+9U4BqICxkFSLpvny/Su6UbHGojCjIOkXLbOlz3TexodbyAKMg6Schk1X5oyEIUYB0m5tDVfDEQBxkFSLm3OFwPRMeMgKZe254uB6JBxkJRLjvliIDpiHCTlkmu+GIgOGAdJueScLwYiM+MgKZfc88VAZGQcJOXSxXwxEJkYB0m5dDVfDEQGxkFSLl3OFwPRMuMgKZeu54uBaJFxkJRLifliIFpiHCTlUmq+GIgWGAdJuZScLwZih4yDpFxKzxcDsQOlN0/ScNUwXwzEhGrYPEnDVMt8MRATqGXzJA1PTfPFQDRU0+ZJGpba5ouBaKC2zZM0HDXOFwMxpho3T9Iw1DpfTi+9gL44eN1B5pbmqto8Sf1XaxzAM4ixzR02DpLaVXMcwECM7cC+A9VtnqT+qj0OYCDGNrt/trrNk9RPfYgDGIix1bh5kvqnL3EAA9E7KaXSS5A0oT7FAQxEr6ysrrCwtFB6GZIm0Lc4gIHojY071+LxxdJLkdRQH+MABqIXNt+5ZqZmSi9HUgMppV7GAXyhXPW2fuYxf3S+9JIkNbCwtMChY4d6FwfwDKJqo05LI6L0siQ1sHh8sZdxAANRrb4+ZynpnmamZnr7+DUQFTIO0nDs3b23t49fA1EZ4yANS5+fFjYQFTEOknJZWV3hyPKRRscYiEoYB0m5bMyX5RPLjY4zEBUwDpJy2TxfpndNNzrWQBRmHCTlsnW+7Jne0+h4A1GQcZCUy6j50pSBKMQ4SMqlrfliIAowDpJyaXO+GIiOGQdJubQ9XwxEh4yDpFxyzBcD0RHjICmXXPPFQHTAOEjKJed8MRCZGQdJueSeLwYiI+MgKZcu5ouByMQ4SMqlq/liIDIwDpJy6XK+GIiWGQdJuXQ9XwxEi4yDpFxKzJfBBSIiHh8R74mIGyNiOSK+ExFXRcSjcr5f4yApl1Lz5fTs76F7B4FfAK4GvgacDbwW+NuIeFJKab7td2gcJOVScr4MMRC/D/zblNKJjQsi4iPADcCbgJe2+c6Mg6RcSs+XwQUipfT5EZd9KyJuBC5o832V3jxJw1XDfBlcIEaJiAD2ADduc72zgDO3XLxv1HVr2DxJw1TLfDklAgG8BNgLvHmb670GuHy7G6tl8yQNT03zZfCBiIjzgfcCXwD+eJurX8HaF7c32wdcu/EfNW2epGGpbb4MOhARcTbwl8APgItTSqsnu35K6ShwdMtt/PjftW2epOGocb4MNhAR8QDgr4CfAp6WUrptJ7dX4+ZJGoZa58sgAxERZwB/DjwK2J9S+vpOb/PgdQeZW5qravMk9V+tcYBhvpL6NOAjwJOBS1JKX2jjducOGwdJ7ao5DjDMM4j/AjyftTOIB0bEPV4Yl1L64CQ3emDfgeo2T1J/1R4HGGYgHrf+979e/7PVRIGY3T9b3eZJ6qc+xAEGGIiU0jNy3G6Nmyepf/oSBxjg1yCGLqVUegmSJtSnOICB6JWV1RUWlhZKL0PSBPoWBzAQvbFx51o8vlh6KZIa6mMcwED0wuY718zUTOnlSGogpdTLOMAAv0g9NFs/85g/2vrvO5KU0cLSAoeOHepdHMAziKqNOi3d/LOhJNVv8fhiL+MABqJafX3OUtI9zUzN9PbxayAqZByk4di7e29vH78GojLGQRqWPj8tbCAqYhwk5bKyusKR5SONjjEQlTAOknLZmC/LJ5YbHWcgKmAcJOWyeb5M75pudKyBKMw4SMpl63zZM72n0fEGoiDjICmXUfOlKQNRiHGQlEtb88VAFGAcJOXS5nwxEB0zDpJyaXu+GIgOGQdJueSYLwaiI8ZBUi655ouB6IBxkJRLzvliIDIzDpJyyT1fDERGxkFSLl3MFwORiXGQlEtX88VAZGAcJOXS5XwxEC0zDpJy6Xq+GIgWGQdJuZSYLwaiJcZBUi6l5ouBaIFxkJRLyfliIHbIOEjKpfR8MRA7UHrzJA1XDfPFQEyohs2TNEy1zBcDMYFaNk/S8NQ0XwxEQzVtnqRhqW2+GIgGats8ScNR43wxEGOqcfMkDUOt8+X00gvoi4PXHWRuaa6qzZPUf7XGATyDGNvcYeMgqV01xwEMxNgO7DtQ3eZJ6q/a4wAGYmyz+2er2zxJ/dSHOICBGFuNmyepf/oSBzAQvZNSKr0ESRPqUxzAQPTKyuoKC0sLpZchaQJ9iwMYiN7YuHMtHl8svRRJDfUxDmAgemHznWtmaqb0ciQ1kFLqZRzAF8pVb+tnHvNH50svSVIDC0sLHDp2qHdxAM8gqjbqtDQiSi9LUgOLxxd7GQcwENXq63OWku5pZmqmt49fA1Eh4yANx97de3v7+DUQlTEO0rD0+WlhA1ER4yApl5XVFY4sH2l0jIGohHGQlMvGfFk+sdzoOANRAeMgKZfN82V613SjYw1EYcZBUi5b58ue6T2NjjcQBRkHSbmMmi9NGYhCjIOkXNqaLwaiAOMgKZc254uB6JhxkJRL2/PFQHTIOEjKJcd8GWQgImIqImYj4raIuCsivhQRzym5JuMgKZdc86VxICLiCxHx2B2/57w+APwq8CHg9cAq8ImIeGqJxRgHSbnknC+TnEGcC1wfEW+PiDNaWUWLIuIJwL8Bfj2l9MaU0pXAs4BbgP/c9XqMg6Rccs+XSQLxaOB9wK8BN0TE/tZW046LWTtjuHLjgpTS3cAfAU+OiHO6WohxkJRLF/OlcSBSSosppV8BngwsAp+MiP8eEWe2urLJ/SzwzZTS1l/e/OX1vx93bwdGxFkR8ZjNf4B9kyzCOEjKpav5MvGvHE0p/XVEPB74j8BbgOdFxHdHXzX9i0nfzwQeAtw+4vKNyx56kmNfA1y+0wUYB0m5dDlfdvo7qU8HzgSmgH9c/1Pa/YDjIy6/e9Pb780VwNVbLtsHXDvuOzcOknLper5MHIj1rz1cATxy/e/LUkpLbS1sB+5iLVhbnbHp7SOllI4CRzdf1uSXfRgHSbmUmC+TfJvrmRHxQeCTwJ3AU1JKr6skDrD2VNJDRly+cdltOd6pcZCUS6n5MskZxN8Du4A3Ab+fUlptd0k79nfAMyNiZssXqp+46e2tMg6Scik5Xyb5NtcvAo9NKf1uhXEA+ChwGvCqjQsiYgp4JfCllNKoL6RPzDhIyqX0fGl8BpFSem6OhbQlpfSliLga+E8RcRZwE/By1l7g9x/afF+lN0/ScNUwX3b6XUy1+nesfevty4CfBr4GPC+l9Nm23kENmydpmGqZL4MMxPorp9+4/qd1tWyepOGpab4M8qe55lTT5kkaltrmi4FooLbNkzQcNc4XAzGmGjdP0jDUOl8G+TWIHA5ed5C5pbmqNk9S/9UaB/AMYmxzh42DpHbVHAcwEGM7sO9AdZsnqb9qjwMYiLHN7p+tbvMk9VMf4gAGYmw1bp6k/ulLHMBA9E5KqfQSJE2oT3EAA9ErK6srLCwtlF6GpAn0LQ5gIHpj4861eHzrr9qWVLs+xgEMRC9svnPNTM2UXo6kBlJKvYwD+EK56m39zGP+6HzpJUlqYGFpgUPHDvUuDuAZRNVGnZY2+R3ZkspbPL7YyziAgahWX5+zlHRPM1MzvX38GogKGQdpOPbu3tvbx6+BqIxxkIalz08LG4iKGAdJuaysrnBk+UijYwxEJYyDpFw25svyieVGxxmIChgHSblsni/Tu6YbHWsgCjMOknLZOl/2TO9pdLyBKMg4SMpl1HxpykAUYhwk5dLWfDEQBRgHSbm0OV8MRMeMg6Rc2p4vBqJDxkFSLjnmi4HoiHGQlEuu+WIgOmAcJOWSc74YiMyMg6Rccs8XA5GRcZCUSxfzxUBkYhwk5dLVfDEQGRgHSbl0OV8MRMuMg6Rcup4vBqJFxkFSLiXmi4FoiXGQlEup+WIgWmAcJOVScr4YiB0yDpJyKT1fDMQOlN48ScNVw3wxEBOqYfMkDVMt88VATKCWzZM0PDXNFwPRUE2bJ2lYapsvBqKB2jZP0nDUOF8MxJhq3DxJw1DrfDm99AL64uB1B5lbmqtq8yT1X61xAM8gxjZ32DhIalfNcQADMbYD+w5Ut3mS+qv2OICBGNvs/tnqNk9SP/UhDmAgxlbj5knqn77EAQxE76SUSi9B0oT6FAcwEL2ysrrCwtJC6WVImkDf4gAGojc27lyLxxdLL0VSQ32MAxiIXth855qZmim9HEkNpJR6GQfwhXLV2/qZx/zR+dJLktTAwtICh44d6l0cwDOIqo06LY2I0suS1MDi8cVexgEMRLX6+pylpHuamZrp7ePXQFTIOEjDsXf33t4+fg1EZYyDNCx9flrYQFTEOEjKZWV1hSPLRxodYyAqYRwk5bIxX5ZPLDc6blCBiIhnR8T7I+KbEXFnRNwcEe+LiIeUXtvJGAdJuWyeL9O7phsdO6hAALPAM4A/A14H/AnwS8BXIuLsguu6V8ZBUi5b58ue6T2Njh/aC+V+FfhcSulHGxdExP8APgO8FvjNUgsbxThIymXUfDn/q+c3uo1BBSKl9NlRl0XEHcAFBZZ0r4yDpFzami+DCsQoEXF/4P7AsTGuexZw5paL97W9JuMgKZc258vgAwFcCuwCPjLGdV8DXJ5zMcZBUi5tz5dqAxER92FtsI/jeBrxm3Qi4kLWBv5VKaVPjXE7VwBXb7lsH3DtmOs4KeMgKZcc86XaQAAXAp8e87oXAN/YfEFEnM/adzPNA788zo2klI4CR7fczphLODnjICmXXPOl5kB8A3jlmNe9ffN/RMQ5wBzwA+C5KaWlltfWiHGQlEvO+VJtIFJK3wM+0PS4iHgQa3GYAp6dUrp9m0OyMg6Scsk9X6oNxCQiYhr4BLAXeGZK6Vsl12McJOXSxXwZVCCADwFPAN4PXBARm1/78MOU0jVdLcQ4SMqlq/kytEA8bv3vf7/+Z7NbgE4CYRwk5dLlfBlUIFJK55Zeg3GQlEvX82VoP6yvKOMgKZcS88VAtMQ4SMql1HwxEC0wDpJyKTlfDMQOGQdJuZSeLwZiB0pvnqThqmG+GIgJ1bB5koaplvliICZQy+ZJGp6a5ouBaKimzZM0LLXNFwPRQG2bJ2k4apwvBmJMNW6epGGodb4M6kdt5HTwuoPMLc1VtXmS+q/WOIBnEGObO2wcJLWr5jiAgRjbgX0Hqts8Sf1VexzAQIxtdv9sdZsnqZ/6EAcwEGOrcfMk9U9f4gAGondSSqWXIGlCfYoDGIheWVldYWFpofQyJE2gb3EAA9EbG3euxeOLpZciqaE+xgEMRC9svnPNTM2UXo6kBlJKvYwD+EK56m39zGP+6HzpJUlqYGFpgUPHDvUuDuAZRNVGnZZGROllSWpg8fhiL+MABqJafX3OUtI9zUzN9PbxayAqZByk4di7e29vH78GojLGQRqWPj8tbCAqYhwk5bKyusKR5SONjjEQlTAOknLZmC/LJ5YbHWcgKmAcJOWyeb5M75pudKyBKMw4SMpl63zZM72n0fEGoiDjICmXUfOlKQNRiHGQlEtb88VAFGAcJOXS5nwxEB0zDpJyaXu+GIgOGQdJueSYLwaiI8ZBUi655ouB6IBxkJRLzvliIDIzDpJyyT1fDERGxkFSLl3MFwORiXGQlEtX88VAZGAcJOXS5XwxEC0zDpJy6Xq+GIgWGQdJuZSYLwaiJcZBUi6l5ouBaIFxkJRLyfliIHbIOEjKpfR8MRA7UHrzJA1XDfPFQEyohs2TNEy1zBcDMYFaNk/S8NQ0XwxEQzVtnqRhqW2+GIgGats8ScNR43wxEGOqcfMkDUOt8+X00gvoi4PXHWRuaa6qzZPUf7XGATyDGNvcYeMgqV01xwEMxNgO7DtQ3eZJ6q/a4wAGYmyz+2er2zxJ/dSHOICBGFuNmyepf/oSBzAQvZNSKr0ESRPqUxzAQPTKyuoKC0sLpZchaQJ9iwMYiN7YuHMtHl8svRRJDfUxDnAKBCIi/jAiUkT8Rem1TGrznWtmaqb0ciQ1kFLqZRxg4C+Ui4ifB14B3F14KRPb+pnH/NH50kuS1MDC0gKHjh3qXRxgwGcQERHAu4D/BhwpvJyJjDotXfvfktQXi8cXexkHGHAggJcBjwUuK72QSfT1OUtJ9zQzNdPbx+8gn2KKiN3ALPD2lNL3xv2sOyLOAs7ccvG+lpe3LeMgDcfe3Xt7+/gdZCCANwN3AX/Q8LjXAJe3v5zxGQdpWPr8tHDVgYiI+wC7xrz68ZRSiohHAa8HXpxSOt7wXV4BXL3lsn3AtQ1vZyLGQVIuK6srHFlu9uXYqgMBXAh8eszrXgB8A3gn8PmU0p82fWcppaPA0c2XdVV/4yApl435snxiudFxtQfiG8Arx7zu7RHxLOAi4EURce6mt50O3G/9sjtSSlW92sw4SMpl83yZ3jXNMuNHoupApJS+B3xg3OtHxMPX//mxEW/eC3wbeAPwjh0vriXGQVIuW+fL9V+9npu5eezjqw7EBD4FvHDE5VcCtwBvA27odEUnYRwk5TJqvpz/1fMb3cagApFS+g7wna2XR8Q7gCMppWu6X9VoxkFSLm3NlyG/UK5axkFSLm3Ol0GdQdyblNK5pdewwThIyqXt+eIZRIeMg6RccswXA9ER4yApl1zzxUB0wDhIyiXnfDEQmRkHSbnkni8GIiPjICmXLuaLgcjEOEjKpav5YiAyMA6SculyvhiIlhkHSbl0PV8MRIuMg6RcSswXA9ES4yApl1LzxUC0wDhIyqXkfDEQO2QcJOVSer4YiB0ovXmShquG+WIgJlTD5kkaplrmi4GYQC2bJ2l4apovBqKhmjZP0rDUNl8MRAO1bZ6k4ahxvhiIMdW4eZKGodb5ckr8ytE2HLzuIHNLc1VtnqT+qzUO4BnE2OYOGwdJ7ao5DmAgxnZg34HqNk9Sf9UeBzAQY5vdP1vd5knqpz7EAQzE2GrcPEn905c4gIHonZRS6SVImlCf4gAGoldWVldYWFoovQxJE+hbHMBA9MbGnWvx+GLppUhqqI9xAAPRC5vvXDNTM6WXI6mBlFIv4wC+UG4cuwAuetdF7DpzV5EFHFk+wvKJZaZ3TXPnP93J3T+8mxtvvLHIWrK46aaT/7cGa+hbf/dtd/Pt//ttDn39ENO7prn+q9dz/lfPL7aeW26+ZeOfYw2z8IueJxcRzweuLb0OSWrRC1JKH9/uSgZiGxHxAODpwHeBE/dytX2sReQFwOGOltYnfny258fo5Pz4bG+cj9Eu4BzgMymlH2x3gz7FtI31D+JJSxsRG/88nFIa0HM/7fDjsz0/Rifnx2d7DT5GXxn3Nv0itSRpJAMhSRrJQEiSRjIQ7fg+8Nvrf+sn+fHZnh+jk/Pjs73WP0Z+F5MkaSTPICRJIxkISdJIBkKSNJKBkCSNZCAkSSMZiMwi4g8jIkXEX5ReSy0i4tkR8f6I+GZE3BkRN0fE+yLiIaXX1rWImIqI2Yi4LSLuiogvRcRzSq+rBhHx+Ih4T0TcGBHLEfGdiLgqIh5Vem21iojL1ufNfCu357e55hMRPw98Afgn4H+mlJ5XeElViIi/AR4IXA18C3gk8FrgTuBxKaXvFVxepyLiw8DFwDtY+1i8Ang88MyU0ucKLq24iPgo8Aus3U++BpzN2v3k/sCTUkqtDMGhiIiHAX8PJOAfUkqP3fFtGog8Yu0nZ/0f4BDwbGDeQKyJiAuBz6WUfrTlss8Ab0sp/WaxxXUoIp4AfAl4Y0rp99YvOwOYB46mlJ5Scn2lRcRTgL9JKZ3YdNnPADcAH00pvbTY4ioUEX8CnAmcBjy4jUD4FFM+LwMeC1xWeiG1SSl9dnMcNi4D7gAuKLOqIi4GVoErNy5IKd0N/BHw5Ig4p9TCapBS+vzmOKxf9i3gRk6t+8m21j/Buhi4tM3bNRAZRMRuYBZ4+6n0dMlORMT9WXvq4FjptXToZ4FvppS2/qLxL6///biO11O99TPzPZxa95OTiojTgHcD70sp3dDmbfv7IPJ4M3AX8AelF9Ijl7L2y0w+UnohHXoIcPuIyzcue2iHa+mLlwB7WXuMac2rgUcA+9u+YQNxEhFxH8b83a3A8ZRSWv8Oi9cDL04pHc+3ujpM8jEacRsXApcDV6WUPtXm+ip3P2DUfeTuTW/Xuog4H3gva9/48ceFl1OFiHgQ8DvAW1JKrf8gQ59iOrkLWTsTGOfPo9ePeSfw+ZTSn3a+2jIm+Rj92PqD/s9Y+8LsL3ez5GrcBUyNuPyMTW8XEBFnA38J/AC4OKW0WnhJtXgra1+7e3eOG/cM4uS+AbxyzOveHhHPAi4CXhQR52562+nA/dYvu2PEc8591uhjtPk/1r8IO8fag/65KaWlltdWu9tZe7pkq43Xg9zW4Vqqtf574f8K+CngaSklPy78+Du6XsXa07MP3fQrR88A7rs+bxZTSndM/D78Ntf2RMQrgP+6zdXekFJ6RwfLqdr6qfHnWHs9xFPXvzvllBIRvwu8AXjg5k8aIuI3gLcBD08pfbfU+mqw/m2/c8DPAftTSl8ovKRqRMQzgE9vc7V3ppQm/s4mA9GiiHg48C9HvOlK4BbWHvQ3pJQOd7qwykTENPAp1r5V8ZkppesLL6mIiHgi8EXu+TqIKdaebvvHlNKTSq6vtPXvzvkY8FzgBSmlTxReUlUi4sHAU0e86a3Abta+Fnp4J9/ZZCA6EBH/gC+U+7GIuAZ4AfB+fvIzoB+mlK7pflVlRMRVwAtZ+463m4CXA08Anr3+2pBTVkS8g7Uh9+fAVVvfnlL6YOeL6oGI+F+09EI5A9EBA3FP6x+PR9zLm29JKZ3b3WrKWn8K5S3AS4GfZu1HSvxWSumTRRdWgfVB9/R7e3tKKe7tbacyAyFJys5vc5UkjWQgJEkjGQhJ0kgGQpI0koGQJI1kICRJIxkISdJIBkKSNJKBkCSNZCAkSSMZCEnSSAZCKiQiPhgRd6//mtqtb3tTRKSI8Ac8qhh/WJ9USEScxdpv5Pu7lNKzNl3+z4AbgU+klC4utT7JMwipkJTSUeAg8MyIePmmN10BrLD2uxCkYjyDkAqKtV8k/L+BRwPnA88BPgy8LqWU5RfRS+MyEFJhEfEY4CvANcDTgFuBJ6aUflR0YTrlGQipAhHxduDXgVXgCSmlvy28JMmvQUiVOLb+923AfMmFSBsMhFRYRJwD/DZrYTgH+LWyK5LWGAipvPes//2vgKuByyLikQXXIwEGQioqIl4IPB/4rZTSrcClwAngvUUXJuEXqaViImI38HXg+8DjU0qr65e/Dngn8EsppasLLlGnOAMhFRIR7wReCzwppfTXm3CFIkkAAAB7SURBVC4/DfgycDZwfkppqdASdYrzKSapgIj4OeBXgCs2xwFg/Uzi1awF4q0FlicBnkFIku6FZxCSpJEMhCRpJAMhSRrJQEiSRjIQkqSRDIQkaSQDIUkayUBIkkYyEJKkkQyEJGkkAyFJGslASJJGMhCSpJEMhCRppP8HnDSqQdS4hYAAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 720x480 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fused_quartz = mp.Medium(index=1.5)\n",
    "\n",
    "resolution = 50        # pixels/μm\n",
    "\n",
    "dpml = 1.0             # PML thickness\n",
    "dsub = 3.0             # substrate thickness\n",
    "dpad = 3.0             # padding between grating and PML\n",
    "gp = 10.0              # grating period\n",
    "gh = 0.5               # grating height\n",
    "gdc = 0.5              # grating duty cycle\n",
    "\n",
    "sx = dpml+dsub+gh+dpad+dpml\n",
    "sy = gp\n",
    "\n",
    "cell_size = mp.Vector3(sx,sy,0)\n",
    "pml_layers = [mp.PML(thickness=dpml,direction=mp.X)]\n",
    "\n",
    "wvl_min = 0.4           # min wavelength\n",
    "wvl_max = 0.6           # max wavelength\n",
    "fmin = 1/wvl_max        # min frequency\n",
    "fmax = 1/wvl_min        # max frequency\n",
    "fcen = 0.5*(fmin+fmax)  # center frequency\n",
    "df = fmax-fmin          # frequency width\n",
    "\n",
    "src_pt = mp.Vector3(-0.5*sx+dpml+0.5*dsub)\n",
    "sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=src_pt, size=mp.Vector3(y=sy))]\n",
    "\n",
    "k_point = mp.Vector3(0,0,0)\n",
    "\n",
    "symmetries=[mp.Mirror(mp.Y)]\n",
    "\n",
    "sim = mp.Simulation(resolution=resolution,\n",
    "                    cell_size=cell_size,\n",
    "                    boundary_layers=pml_layers,\n",
    "                    k_point=k_point,\n",
    "                    default_material=fused_quartz,\n",
    "                    sources=sources,\n",
    "                    symmetries=symmetries)\n",
    "\n",
    "nfreq = 21\n",
    "mon_pt = mp.Vector3(0.5*sx-dpml-0.5*dpad)\n",
    "flux_mon = sim.add_flux(fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy)))\n",
    "\n",
    "f = plt.figure(dpi=120)\n",
    "sim.plot2D(ax=f.gca())\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now, we'll run the simulation and record the fields."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "field decay(t = 50.01): 0.10609306658233127 / 0.10609306658233127 = 1.0\n",
      "field decay(t = 100.01): 8.493199823356459e-20 / 0.10609306658233127 = 8.005424008330923e-19\n",
      "run 0 finished at t = 100.01 (10001 timesteps)\n"
     ]
    }
   ],
   "source": [
    "sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, mon_pt, 1e-9))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "input_flux = mp.get_fluxes(flux_mon)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we'll simulate the actual grating."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-----------\n",
      "Initializing structure...\n",
      "     block, center = (-2.25,0,0)\n",
      "          size (4,1e+20,1e+20)\n",
      "          axes (1,0,0), (0,1,0), (0,0,1)\n",
      "     block, center = (0,0,0)\n",
      "          size (0.5,5,1e+20)\n",
      "          axes (1,0,0), (0,1,0), (0,0,1)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x480 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sim.reset_meep()\n",
    "\n",
    "geometry = [mp.Block(material=fused_quartz, size=mp.Vector3(dpml+dsub,mp.inf,mp.inf), center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub))),\n",
    "            mp.Block(material=fused_quartz, size=mp.Vector3(gh,gdc*gp,mp.inf), center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh))]\n",
    "\n",
    "sim = mp.Simulation(resolution=resolution,\n",
    "                    cell_size=cell_size,\n",
    "                    boundary_layers=pml_layers,\n",
    "                    geometry=geometry,\n",
    "                    k_point=k_point,\n",
    "                    sources=sources,\n",
    "                    symmetries=symmetries)\n",
    "\n",
    "mode_mon = sim.add_flux(fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy)))\n",
    "\n",
    "f2 = plt.figure(dpi=120)\n",
    "sim.plot2D(ax=f2.gca())\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "field decay(t = 50.01): 0.1031398354415896 / 0.1031398354415896 = 1.0\n",
      "field decay(t = 100.01): 8.275841626038753e-06 / 0.1031398354415896 = 8.023904237006029e-05\n",
      "field decay(t = 150.02): 7.578862246277466e-06 / 0.1031398354415896 = 7.348142658778572e-05\n",
      "field decay(t = 200.03): 2.633198313201328e-06 / 0.1031398354415896 = 2.5530371479917354e-05\n",
      "field decay(t = 250.04): 1.0595609940381944e-06 / 0.1031398354415896 = 1.0273052981922272e-05\n",
      "field decay(t = 300.04): 4.182093600425728e-07 / 0.1031398354415896 = 4.054780175399971e-06\n",
      "field decay(t = 350.05): 1.7897453529966721e-07 / 0.1031398354415896 = 1.7352610127153491e-06\n",
      "field decay(t = 400.06): 7.323581231104047e-08 / 0.1031398354415896 = 7.100633038387535e-07\n",
      "field decay(t = 450.07): 2.934107857572782e-08 / 0.1031398354415896 = 2.844786250637789e-07\n",
      "field decay(t = 500.08): 1.1841535133169714e-08 / 0.1031398354415896 = 1.1481049084934639e-07\n",
      "field decay(t = 550.08): 4.9984066703627664e-09 / 0.1031398354415896 = 4.8462426267816536e-08\n",
      "field decay(t = 600.09): 2.35073055720754e-09 / 0.1031398354415896 = 2.2791684194016495e-08\n",
      "field decay(t = 650.1): 1.1816026525464885e-09 / 0.1031398354415896 = 1.1456317023267471e-08\n",
      "field decay(t = 700.11): 3.9576427413983696e-10 / 0.1031398354415896 = 3.837162163827255e-09\n",
      "field decay(t = 750.12): 1.4213834548284144e-10 / 0.1031398354415896 = 1.3781129752076983e-09\n",
      "field decay(t = 800.13): 8.16132061584665e-11 / 0.1031398354415896 = 7.912869533778332e-10\n",
      "run 0 finished at t = 800.13 (80013 timesteps)\n"
     ]
    }
   ],
   "source": [
    "sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, mon_pt, 1e-9))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we can compute the diffraction orders as a function of wavelength:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "freqs = mp.get_eigenmode_freqs(mode_mon)\n",
    "\n",
    "nmode = 10\n",
    "res = sim.get_eigenmode_coefficients(mode_mon, range(1,nmode+1), eig_parity=mp.ODD_Z+mp.EVEN_Y)\n",
    "coeffs = res.alpha\n",
    "kdom = res.kdom\n",
    "\n",
    "mode_wvl = []\n",
    "mode_angle = []\n",
    "mode_tran = []\n",
    "\n",
    "for nm in range(nmode):\n",
    "  for nf in range(nfreq):\n",
    "    mode_wvl.append(1/freqs[nf])\n",
    "    mode_angle.append(math.degrees(math.acos(kdom[nm*nfreq+nf].x/freqs[nf])))\n",
    "    tran = abs(coeffs[nm,nf,0])**2/input_flux[nf]\n",
    "    mode_tran.append(0.5*tran if nm != 0 else tran)\n",
    "\n",
    "tran_max = round(max(mode_tran),1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note the use of the keyword parameter argument `eig_parity=mp.ODD_Z+mp.EVEN_Y` in the call to `get_eigenmode_coefficients`. This is important for specifying **non-degenerate** modes in MPB since the `k_point` is (0,0,0). `ODD_Z` is for modes with E<sub>z</sub> polarization. `EVEN_Y` is necessary since each diffraction order which is based on a given k<sub>x</sub> consists of *two* modes: one going in the +y direction and the other in the -y direction. `EVEN_Y` forces MPB to compute only the +k<sub>y</sub> + -k<sub>y</sub> (cosine) mode. As a result, the total transmittance must be halved in this case to obtain the transmittance for the individual +k<sub>y</sub> or -k<sub>y</sub> mode. For `ODD_Y`, MPB will compute the +k<sub>y</sub> - -k<sub>y</sub> (sine) mode but this will have zero power because the source is even. If the $y$ parity is left out, MPB will return a random superposition of the cosine and sine modes. Alternatively, in this example an input planewave with H<sub>z</sub> instead of E<sub>z</sub> polarization can be used which requires `eig_parity=mp.EVEN_Z+mp.ODD_Y` as well as an odd mirror symmetry plane in *y*. Finally, note the use of `add_flux` instead of `add_mode_monitor` when using symmetries.\n",
    "\n",
    "The diffraction spectrum is then plotted and shown in the figure below."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA/oAAAMFCAYAAADEIo1tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAewgAAHsIBbtB1PgAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOzdd7w8VX3/8dfnS6+C0oX4FQz2jigqxV7A2GPLT782LInBrtFEjYldoiR2LIBGYi/Yg4AgStEgIopY6SgoSP1SP78/zix37rL13t25W17Px2MeO7t7ZubM3XL3PWfOmchMJEmSJEnSbFi10hWQJEmSJEmjY9CXJEmSJGmGGPQlSZIkSZohBn1JkiRJkmaIQV+SJEmSpBli0JckSZIkaYYY9CVJkiRJmiEGfUmSJEmSZohBX5IkSZKkGWLQlyRJkiRphhj0JUmSJEmaIQZ9SZIkSZJmiEFfkiRJkqQZYtCXJEmSJGmGGPQlSZIkSZohBn1JkiRJkmaIQV+SJEmSpBli0JckSZIkaYYY9CVJkiRJmiEGfUlzKSIOiYispjUrXR9Nv4i4VUS8MSJOjIhLIuKGJt9jEbGmtr1DupTZp1bmmAHWuVNEvCsifhIRf4mIG2vL79Oh/O4RcWhE/DoirqyVzWXv4IzxbzM9ImJ17fX6/UrXR5IGse5KV0CSpGkXETsDxwK3Xum6jEpE3Bf4FrDFgOVfBLwPGxEkSVpxBn2pj+ro/W2qu7fNzN+vXG3UpKoV9hPV3UMzc804ltFM+DALIf9q4EjgPOCG6rFfrESllioiAjiMhZB/KXAU8Afgxuqx82rlbwP8Jwsh/7fAicCfm6jvSqu3ymdmrGRdJEkCg74kScsSEdsDD63uXgPcPTN/tYJVGoX7ArtW8xcBd8rMi3uUfxoLvym+A+ybmdePsX6SJKkHg76kuVS1tK9Z4WpoNtyzNn/cJIf8zDwGGKTF+V61+a/0Cfnt5Q8z5Pdny78kaZzsRydJ0vJsWZu/YMVqMVrD7tMs/g0kSZpaBn1JkpZnvdr8jV1LTZdh92kW/waSJE0tg77UQf1SOiwMxAfwu/olkbpdZqrTZZMi4u4RcVBE/Cwi/lw9/+UO2753RPxTRHwtIn4bEVdExLUR8YeI+EFEvCUi/mrA/fh9rS6rq8d2jIh/i4hTI+LS6hJYZ0TEf1UDag2y3k0j4oUR8fWIODsiroqI66rLb50REUdExOsi4i5dlr/ZZcAiYlVEPD0ivhkR50TENdU+fyEi9uiwjvUj4v9FxHer8muruhwaEXccYB+6Xl6v9RwLg+oBPKvLa3/MUpdp2+Z6EfGIiHhnRBwdEedX+3R1RJxb/V1eGhGbDrBvHS8FFRG7RcRHI+LM6jW7JCJOql6rTfqtt20bm0fES6rX+vfV+/Saqt7fjXKZuTsPsJ6IiMdXr9uZ1XtobfWafjkinhURY+lmVr2P/zEivl39jddWf5OfRcT7oow6323Zmy5TR//X/JAR1PVeEXFwlO+EqyPiouq1e3VE3HKI9XS9vF79cwm8sfbUGzvs05vqnyFg71r5ozuU36e2nZt99iJii4g4ICKOjYjzIuL66vlFI/5HxDYR8ezq/XJKlO/S66J8l50REZ+IiEcM/IddvO4HRvmOPiUi/lit97KIOK3a3tMiYqNOf8u29XT6zN/0Hdyp3ID1u3OUSx2eEhEX1z5vx0TEayLiVgOso+MlGKvP4BFRvkOvqfb/OxHxdxExli4GEbFVRLw2Ir4XERdU27242r93RcSdBlhHt++6B0b5rjsjyndKRsR7u6xj+yj/V39avd6XRcTpEfGeiLj9MvZvp4j4l4g4rnqdrqner6dExLsjYtcB1rGcz8pWEfHKiDgyFv6ftD4rp0fE5yPi5RFx26Xuo6QJl5lOTk5tE7AayCGmfdqWv+m56v6bgOs7LPfltuVOGnB71wKvHmA/fl9bZjXwOMro2d3WexVlEK1e69wDOHeIv826Hdaxpvb8IcBWwHd7rONG4Nm15W8H/LxH+WuAx/XZj0Nq5df0eK7fdMxSl6ltbyfg4gGXvRh42BDv399T+mT/K2UE+G7r/S2w84CfjxdSRlMfpL6P7LGeuwGnDLCOMyiDwY3yM74f5RTzftv+b2DjDsvvM8Trfcgy6/rvdP7+aE3nAPej7XPVZV31ere/D9f02Eb79CaGe8/vU9tOfbk1wAOAs7sst0VtuX/s83eoT98FbjXg33dHygCCg6z3hCW+BxJY3ev/RI/6rUu5okG/fb8EeFafdS16jwC3AL7SZ73fBDYa8efvOfT+X5TV/r4HWGeI77r1gQ91Wd97Oyz/+Orv1q0Oa4HntW+nz76tAt5MufpGr/27DngLED3WdUit/BoG/6w8lsG/o88d5Wvr5OQ0OZOD8UmdXQa8v5p/JrBZNX8YcHmH8ud1eAyAiHgVC61jv6GE+asoPxyuayveaqm/Bjgd+DXwF0pQ254yEvZWlNNk3xERZOY7B9ynh1J+AK1D+aHwQ8p+3pbyg3VdYCPgsxFxl8z8XYd92Qn4Ngt/j+uAk6t6XgVsUu3X3YHNB6zXusAXgT0pP6q+V9XvlsBDKJf3CuCjEfEr4EzKZb52qup/LCWwbVvt48aUH3ufjog7d9qPARwJXAHcoaoDlLD53Q5lf7WMZVo2AVqtcZdQXvuzqvWtT3mN7gdsWJX7RkTsnZk/GHB/3gi8oZr/CXAa5bW7BwuDqN0W+HJE3Ct7DKQWEf8JvKT20A2U98CvKK/f1tV6V1fPb9hlPXsBR7DwPmm9l35Vza8GHlgtf3vgBxGxR2Yu+zJ1EfEUSoBfp7YP36e8jzelvBd3qJ57OnDbiHhwZq6treY8Fr4j+r3mJyyjrm8F/qn20FWU9/8FwHbAgylB9RtAxxbLIfyChX3aHbhPNX8y5Xur7iTK3+uK6v7jWfibfZmbfyd2+468HaXet6B8tx4LnE/p879XW9kdWHjNflvV9yLK+24L4K5A6yySBwNHRsT9MvOaLtsmylkn/0v5fm35I/CDat0bArtQBlzciMXv5/p74O9rj7+fzi7rVo8e9VsFfAH4m9rDfwaOqW53Ah5E+Z7YAjgkIrbIzIMGWP261bofQjl4/APK/6gNKZ+B1v+jRwL/Abxo2Pp3EhGvBN5Ve+gaFr73t6Tszy0pr/VLgb+KiCdlZg6w+vcAL6jmTwNOpXyf7Epbl5KI2Bf4LAsDU98IHE/5H7Mp5f23PXAw5SDTIPu2DvAZ4Im1h8+jfF4uqtZ7X8p7al3gdZTvzP0HWP1An5WI2A34fG2/rqZ8B/2e8rfevNr+XSn/LyXNqpU+0uDkNOkTba3iAy7TftT+Ujq0MAMbtN3/APBourSeUH74rKH8uE7Kj7PbDlj3tdVyf0dbCwLlx3G9lf7jXdb3nlqZY4EdupRbl3Iq76fo0BrD4laltdXtl4Ft2sptWW2nVfYo4EvV/AeBzdrK78jilv6O+1GVPaRWbk2XMvV6HjLga7+UZW5DabHbHVjVpczmwLtr6/5lj7Kra+WuofyA/TWwe4eyT67eR63yz+xRzxe2vbc/A+zUpexdgIOAh3d4bjvK9dhb6zkU2L5DuW0pB4Fa5X7a6f005Od5F8qP5NY6TwRu11ZmFfByFp8B8Z+jfM0HrOte1WvXWvfngC3bytwCOLz2WvesBz1a9NvKvalW7k0D1PWYWvl9+pStf/auq27fB2zaVm69+nuc0gr8D8Cte6z7bpQDE631/3OPsptTQl2r7EWUywTerIWVcjDu6XT/brzpczHE69t3GeDVbZ+5twHrd/g8fbvtb3rfAd6rre/eb7T/TSnf4e+qlb2RAf//9dnn+7P4zIRvANu2ldkAeGfbfr+8y/pW18q01ns2sGeHshvU5m/F4u+gnwJ3bCu/qvr738jiz9bve+zfm2vlLgCe0OX99GQWn9Hwt6P6rLDwPzIpgX/LLuvekPJ740PLfV2dnJwmc1rxCjg5TfrE8oP+DcBeI67TU2rrf8eAdb+R3qdR71srezmdT7n/Ua3M7ZZR/zVtf6Oj6RLgKCG4/ZTVQ3qs+wG1cpd12o+qXP0H1JoB6tl1m8tdZsi/3Qdr639UlzKr2/5eF9PloExVvv6D/ptdymxZ/T1b5T64jH34WG09B/Upuw6Lu3U8ZZl/v0Nr6/oVcIseZV/W9jnueFBtXK85pXWxtd4je3xGVrE46HWtB5MX9BM4eFR/s2r9t2ChW8b5Pf5u/16rw6XA7ZexzZv2Z1TLUA5E1A9KvavHujZgcdevowZ4ryblQGq378hoW+drRvDafK+2vuNpO2jRVvagWtm/0HZgtyqzum1/rgR2HaAeb6ktcyFtB5nbyr6+bRu/71JuNQv/q/4E7NKnDg+qrfPndD4gMPRnhYVuYGtpOyDg5OQ0X5OD8Unj9/nMPHbU62ThlNmHDrjM1zLzWz2e/wblBw+U0ws7DWhXPx3/ogG3O4iXZeYNnZ7IzLMop5S2XENpZekoM4+n9FmG0sXgDqOq5IT4RG1+0Nf+rZl5fo/nP16bv0+XMvuz0GXjLMoptUOLiK0pZ5VAeb+9plf56n3x+tpDz1jKdqttb0E5SNby6sz8S49FDqJ0o4ASpgc5vXYkogwoef/aQ//Y4zNyI6U7RTZRtxFbS4/P81JUr+mXqrvbAzcb1C0iNmDx6favzcxfjrIeI/B0yncxlNbnN3QrmKV7wj/UHnrQgAPJvTS7dNXJzGTx983uA6yvq+o9Xe+O8Q+ZeW2PRV5HCa1Q/vc8fYDNvC8zz+xTj6CcHdLy5sz8Y49F3kn5zuvnABa6lrw5M3/Tq3BmHk05QAfl/+09+6x/0M9K6//0VZl5Rc+SkmaaffSl8fufpSwUEXej/ONfTfnHvUFbkdaP+rtGxKrqx34vn+v1ZGZmRJxKOQ2UaruntRU7B/jrav6FwDv6bHMQv8nMn/QpcxqlzyjAcX1+lAH8jNJ3FUrf858to36Nioj1KH047055LTZj8Xf1ZrX5ewy42p6vPaVf+dWUPsi3iojNMrN9LIpH1uYPzh79nvt4KKU/McAXc3G/925OpLTUbULpt79U92fhc3QxZYyArjLzxoj4OHBg9dCDlrHtYdW39ePM/Hmvwpl5ZkScQBksc5p8JzMvGXahiNiGMm7FHSlnm2xCaYFu2a02fw9u/l12P0qfdiit5ocOW4cGPLg2f3hmXt2rcGaeFBGnUfpeQ3kP9Tp48dvM/L8+dTilNr+6T9l+6u/pn2TmKV1LApl5ZUQczsKYIA8CPtxnG4P8v70jC//nrgc+3ace10XEp1k8VkYnj67N91xnzVFA6yoRDwR6vR6DflbOAXYGtoyIp2TmZwasi6QZY9CXxu/HwxSOiGdRWjL6Xnqnsh7lVNV+PwDaf+h28qfafKfB9D7Lwo/Pt0fEwyiDmv1vZp47wPo7GSSE1/ft9K6lFvy5Nj/ooIArKsplu15HOYCy1YCLDVLuL5l5Tq8C1UGeSyhBHxZOGa6rX2ru6AHr10k9iN4tIt435PJbRsQmmXnlErZdbzE7qVtLZpvj68tHRFQtneNWr+sPB1zmh0xf0B/2+/FOlAOMj2Kh9bSfTp+T+9XmT+gXoldI/T0w6MCbx7MQ9O/VqyCj+Z8wjKXuTyvo99uf6xhsn+r1OCMzLx1gmZ6fwerShq3/2ddSLkk5wGoXnW2yU9dSxaCflc8Cr63mD68GH/0McPQAB8klzRCDvjR+A53iXp1O+DHg2UvYxmb0D/q9TlFuqV8FYL0Oz3+U0rL7uOr+Q6qJiDgbOI4SAr+SmRd3WH6p9aoHsmHLd9qPiRIRW1JadgZtoW/ZrH+Rgf5e0OO1j4jNWTgIAGXE86XaoTb/QJbWQr8lpYV/WFvX5gc5FRfKOBct61P+5kOPnr4E9bqePeAyg5abJAN3AYqIR1AuBdd+dlM/nT4n29bml/N+Hqflvl/7HQgcxf+EYYx7fy4Z8ODdOD5b9as2rM/ibiGD2rLP84N+Vv6dMhbH/ShnuTy+mqiuXHMcZdyTIzqcuSVphthHXxqzIVqKns/ikP8t4FmU1pktKSMGR2ti8Q+lQT7Ly26FrPoIP4FyXeH2U4n/itJ/+qPA+RHx0Yi45RjqNY39kPt5Pwsh/1rK3/CxlBaizSiDZbVe99vWlmvkdefmQWk5/T5vsZyKVJZ6kHrT2vygBwrayw1ycGUU6nW9asBllnLwY6UN9P1Yje3wGRZC/lmUU6kfSDl4tDFl1PHW5+Rfa4t3+pzUX8dJ7ce83Pdrv/dq09+l496fQf/XjuOz1cT32kD7V53ttDfwKhYfKIHS9e45lDPxLoyId1Znk0maQbboS5PjlbX5N2bmm/uUbypwLFKdtvwx4GMRsSvlB8UDKH3od66KrQc8F9inuvb5KAfumykRcWvgqdXd1pURep0avxKve3urz6YsPRzVfzC/PDPfs8T1LEW9zpsMuEx7uaZawOp1HfRa14Pu0zR6Pgth6lTKlUx6nVnR73NSfx037VpqZV3Bwj4v5f06aa21y/38jWp/xvHZqn+vXZaZowj+S1YNcvjuiDiQcsnJvShjlOwJ3LoqtjHlYMBeEfGgCe2+ImkZbNGXJkBE7MTCIHeXUq6V3Kv85vQ/zW/sMvPMzDw4M9dk5i7A7YH/oFyKDMo1y9+4YhWcDg9mYRCxb/YJ+VAuN9ioKlDVfwTetlvZAfyhNr9d11LjUT/g9FcDLrO6Nn8tzYWnpdS1Xx/fafaQ2vy/9wn50P9zUn8fLuf9PE7Lfb8O2n2qKZOyP+P4bNXfT5tHxKAHEMYqi1Mz878y82mZuSNlrIP61RTuy9K6GkiacAZ9qb8mTm+s91s+IzOv61qyeCCLR5ieCFXwfwWLw/3frFR9RmApr/2wy9Rf+0EGktqrf5GxOLE2/+CupYZbzwOWsZ6lqI/yvXtEDDKYW/0Sd6c0NBAfLK7r/bqWWmzaBuIbxsCfk+p17ffeOqE2v8eEnr5cfw/cv2upxerl+o2o37RJ2Z96Pe4QEYO0vvf8bGXmBSxc1hUG37/GZeYpmfkcShexlmn+Py2pC4O+1F/98l/jGtitfmm8QVoCXjSmeozKV2vz23YtNfmW8toPu8zAr33VSvTMAesxat+szT+/ug75UnybhcES7x8Rd19etYbyA6B1WcCtgX17FY6IVSweN+OoMdWrk/qZHbtFxB16FY6I2zHbQX+Y78jH0f9skRNYGMB0M5b/ubrpc19dInMU6u+3p0bEhr0KR8RulNO0W5ZzdYxxqO/PPatLyHZVfd89tfbQqD5/ZwAXVvPrAk/rU4++ZSpfq82/eGlVa9Ss/J+W1IVBX+qvfnmhW3cttTy/Y6El+C4RsXO3gtWlcvYbUz16iohBL/tWP81xmi/ns5TXfthl6iN+P7pPK/OBrNwPsoNZ6Nt6G+C9S1lJZp4HfKq6G8BhVVeUviJiVTUo25JUl9GqX1P6XRHRqy/3P7BwqbIbgY8sddvDysxfsPgSZAdVBx5upnr8P5nAs3xGqP456dr6WL0/+o77kJnXAB+oPfSOiLj90qs3lv8Tn2bhM7c9PbpBRcT6wH/VHjo6M385onqMRGaeARxbe+h9fQ6K/DuwTTV/GYNfm75fPW4EPl576I19vldeyWDdOw5kodva4yNizaB1ioiRdGOKiA0iYtAxJ2bl/7SkLgz6Un/167w/eRwbqC5F1zqVdBXw+fYfnVXI+Xvgk5QfE2tp3tkR8eGI2LtH6NiNxT84v9mp3JSov/b3jYhB+nMOu8xRLIz8fDvg0IjYol4gIjaPiI8AL2SFRlbPzEuA19QeemFEfCYiduxUPiLuHBEHRcTDOzz9euCCav5uwEldyrXWtWNEvAz4JfCUpe3BTd7MQnjaFfh2+4G16rN2AGW8iZb3Z+bvl7ntYb2ehQOADwc+3em9QflOeBRlDIFZdURt/p8i4u/aC0TEvYDvUQLMIJ+TdwK/qeZvAXw/Ip4aHS6AHhEbR8TTIuLj7c9VRv5/ohqH4N9qD702Iv6tCvX1um1Luexgq4vH9ZQrEkyif2IhDO8JfCEitqkXiIj1I+JtwMtqD/9rZo7y6gjvYaHP/3bA/7afNVN9D7wCeAsDfLYy8zeUgxMtH4+Id3c7QB4R60bEwyPikyzuTrAc2wPnVNvdrVuhiHgYi69MMc3/pyV14aj7Un9fAF5Qzb84Iu5N6StYvyzPB6t/8svxL8B3KEH/nsBpEXE8pSVrU8qPota1el8P7E/zA7NtVG13f+DyiPgJ5TJXV1KucXwH4M618hcBb2q4jiOTmRdGxA8o/S03BE6NiG9RQmrrVOLfZOYHl7pMZl4SEe8G3lA99wzgURFxInAe5TXfhzLq8/WUU0IPHdMu95SZH4iIu7DQdeRvgSdGxMnAmZSDT1tT3r+rqzI3O304M8+PiMcC36C8b25PCdznASdR3jfrVc/dhREOlpaZv4mI51EuL7UO5XT3X0bEcZTQ1/qs1VtlTwBePao6DFHXY6r3xquqh54C7BcRR1FOPd6WMl7CppTT0A9iij9vfRwKvIJycGYD4JMR8TrKCPxrKe+TVrA5ldJFpOdrlpmXRcQTgP+ltBxvBRwOvLf6DF9E+QzvQhnAbKNq3Z18AXhENf+OiHgUcDoLXUUA3lIdMBvGuyljsjymuv/PwIsi4mjKa74T8CAWLjsI8KrMPJEJlJk/iIjXAu+qHnoM5QDy0ZQ+7ltS9udWtcW+xABnaQxZj4sj4rnAFynfA3cHTo+I71O+yzaljIfSGhviVZTPVz//SvnuexblDJtXAC+JiB9Rvl+uAjavytyNhdH8/9S+omXYotruKyLiz5SDCOdRPifbVNutH9w8k8H2TdK0yUwnJ6c+E+WUwewx7dNW/qbnhtzOC4HremznBsoPiaBcH7f1+Oou6+tbpq38IbXyazo8f3mfv0N9+glwhy7bWVMrd8gA9XpTrfyblrsfg5apyu1GOW20234es9xlKD80D+3z97yE0vd4de2x33epc98yy3mvAAcAfxngPXAj8PAe67kNcOQQ76kLgUeM6DO9X7W+ftv8NLBxn3UN9X5eQl3fRvnsd6vjeZQDFn3rQTlo1PW9u4zP3DG18vss9/PZZbldKWGp1+v1fcpBmoHrX70Pvzfge/D7Xdax3gDrWN22zE3P9anfupSzpK7vs/5L+/09h32vsoTvkgFfy+fS/zvkekoXoXXGVT/gSdXfrVsd1lIObA+1HeAlwJ8HfE/dCHxlFJ+V6r2/dsDtJuVA7Hajel2dnJwma7JFXxrMMygD7TwNuAel5afnwEhLkZkfqlrxX0Zp1diBclmz8yineH88M08B6HB2aRNuRWnl2Bu4D+WSgNtS/hZXAecCP6a0bn01S1/IqZaZP6oGjXoJ5TXZmdLa07Uv/bDLZOYNwLMi4nOUH5X3pbRsXQKcTTkt9+NZWsJXj2bPli4zD4qIT1FCwyOAO1E+E1BOh/0FJfR8JjN/1WM9ZwEPjYg9KKc770VpodyS8iP/T8CvgB9RznY5JjOv77K6Yffha9UAds+hhP47V/twNXA+5QfwYTkBLaOZ+U8R8XnK2RwPppzlcQXl4MwXgY9kaaFcTh/ziZeZZ0bEPSmXAnsC5UyQ9SkHbE6jHJT5bGbeMMz3Y/U+3DsiHkJ5H7bOntqccrbSWZTvta+zeACz+jqui4iHUgLsEylnGNyyqt+yVO/5l0TEhyjv14dQPiebUcLkmZSzYw7OzFG2DI9NZn4sIr4CPJ/S7WRXyt/rckrL/pGU77yfj7ken6/O3ngJ5eyC21AC8LlVHT6Ymb8Y9ns3M/8rIg4B/h/wMMoZA1tT/ldeXq3/dMoBsm9k5jmd1zSczDwvIm5F+Z7YE7g3pUvY1pT34uWU9/PJlO/nI0exXUmTKTJzpesgSZIkSZJGxMH4JEmSJEmaIQZ9SZIkSZJmiEFfkiRJkqQZYtCXJEmSJGmGGPQlSZIkSZohBn1JkiRJkmaIQV+SJEmSNBci4jYRcWBEnBERV0bEnyPi5Ih4VURsPKZtbhwRv42IrKbfj2M7i7aZmePehiRJkiRJKyoiHgN8Cti8S5EzgX0z89cj3u67gVfUHjorM1ePchs326ZBX5IkSZI0yyLinsDxwEbAFcDbgKOr+08Fnl8VPRPYLTMvH+F2Twauq6bNaCDoe+q+JEmSJGnWHUQJ9dcDD8/Mt2bmDzPzqMzcH3h1VW5XFre+L1lErAMcDKwDvBX48yjWOwiDviRJkiRpZkXE7sCe1d2PZeYPOxQ7EPhFNX9ARKw3gk0fANwb+CXwjhGsb2AGfUmSJEnSLHtcbf4TnQpk5o3AYdXdLYAHLWeDEXEb4M3V3Rdm5rXLWd+wDPqSJEmSpFn2wOr2SuDHPcp9rzb/gGVu8wPAJsAnM/OYZa5raOs2vUGNVkRsANy1unsRcMMKVkeSJEmad+sAW1fzp2XmNStZmWFExLrAditYhe0YINNk5rlDrveO1e2vM/P6HuXO6LDM0CLiqcCjgUsYUX//YRn0p99dKaM4SpIkSZos9wF+tNKVGMJ2wDkrXYkBxMAFIzYEtqru9jxAkJmXRMSVlJb4nZZUsYgtgfdWd1+bmRctZT3L5an7kiRJkqRZtVlt/ooByl9Z3W66xO29C9gW+CFlxP0VYYv+9LvpCNFJJ53E9ttvv5J1kSRJkubO2trJ4BdccAF73X/31t0Vac0dhfV3fRKx7iaNbCuvv5Jrz/x86+59gAtHuPoNa/ODDIjX6mqx0bAbioi9gOdQLuH3wszMYdcxKgb96XdT/5Xtt9+eHXfccSXrIkmSJM28tb16eS82teNnxbqbEOsvtVF7WS5cQh/8XtbW5tcfoPwG1e3Vw2ykGjvtI5RuBQdl5k+HWX7UDPqSJEmS1McQ4X42xKoyNbWt8bm8Nj/IkYvWaQyDnOZf93rg9pQxDt445LIjZ9CXJEmSpA7mLtzPoMxcGxF/Am4F9Dz9uRpIrxX0hx2U8DXV7ZHAYyI6jhfYWvcm1cj8AH/MzKOG3FZfBn1JkiRJwmA/w34O7AncLiLW7XGJvTvU5n8x5DZa3QKeXU29bAUcXs1/Dxh50HfUfUmSJElza0Y5rVgAACAASURBVO31C5NqAohoaBr73ny/ut0EuHePcnvX5o8fX3XGz6AvSZIkaa4Y7ufOl2vzHVvbI2IV8Mzq7qXA0cNsIDOj3wScVRU/q/b4PkPuy0AM+pIkSZJmWj3YG+4H1BqMr6lpjDLzJOC46u5zI2KPDsVeAdyxmj8oM6+rPxkR+0REVtMh46vtaNhHX5IkSdLMMdCrzQGU0/E3Ar4TEW+ltNpvBDwV2L8qdyZw4IrUcIQM+pIkSZJmguF+hFr955va1phl5ikR8RTgU8DmwFs7FDsT2DczL+/w3FTx1H1JkiRJU8tT8jWozDwCuBvwHkqov4rSH/9HlMvj3TMzf71yNRwdW/QlSZIkTQ0DvZYjM88CXl5Nwyx3DMu8PkBmrl7O8sMw6EuSJEmaaIb7FdDAIHmLtqWRMuhLkiRJmjiGe2npDPqSJEmSVpzBfsLM2GB888agL0mSJGlFGO6l8TDoS5IkSWqM4X5aNNhH34vBjZxBX5IkSdLYGOyl5hn0JUmSJI2U4V5aWQZ9SZIkSctmuJ8xQYOD8TWzmXli0JckSZI0NIO9NLkM+pIkSZIGYrifI9HgYHyNDfo3Pwz6kiRJkroy3EvTx6AvSZIk6SYGe2n6GfQlSZKkOWe4181ENDgYn6PxjZpBX5IkSZpDhntpdhn0JUmSpDlgsNdQHIxvqhn0JUmSpBlluJfmk0FfkiRJmiGGe42EffSnmkFfkiRJmmIGe0ntDPqSJEnSlDHcS+rFoC9JkiRNAcO9GuVgfFPNoC9JkiRNIIO9pKUy6EuSJEkTwnCviRHRYIu+g/GNmkFfkiRJWkGGe0mjZtCXJEmSGmSw11SIgFVeXm9aGfQlSZKkMTPcS2qSQV+SJEkaA8O9pJVi0JckSZJGwGCvmeLl9abaXAb9iNgceDRwH2A34NbA1sBGwKXAz4FvAB/LzD8NsL77Ay8G9gS2rdZxKnBIZh4+jn2QJEnSyjPcS5pEcxn0gd2BbgF8a2DvanpVRPxdZn6724oi4k3AvwD1w1DbAg8HHh4RzwCelJlrR1FxSZIkrRyDveZGRHOD5DkY38jNa9AHOAc4GvhxNX8BJazvCDwJeAKwFfDViNg9M09tX0FEvAB4Y3X3N8BbgdOAHYADgAcB+wIfB54+zp2RJEnSeBjuJU2beQ36R2fmX/V4/rMR8TjgS8D6lDD/hHqBiLgl8I7q7tnA/TLz4trzX6uWfwzwtIj4SGYeM7pdkCRJ0rgY7jX37KM/1ebyL5qZNwxQ5svAL6u7e3Yo8jzgFtX8a+ohv7aNFwOtbb1qabWVJEnSuK29fvEkSdNsLoP+EC6vbjfs8NzjqtvLgC92WjgzzwWOrO4+JCI2G231JEmStFQGe0mzyqDfRUTcHrhHdfeMtufWpwzoB/DDzLy2x6q+V91uQBnhX5IkSSvEcC8NqDUYX1OTRsqgXxMRG0fEX0fEyykBvTWGwXvbiu4KrFPNn0Fv9efvuPxaSpIkaVCeki9pHs3rYHw3iYg1wCd6FHk78Om2x3aszZ/bZxPn1OZ3GrxmRUTs2KfIdsOuU5IkaZYZ6KURiGhwMD5b9Edt7oN+Dz8B9s/Mkzs8V+9rf0Wf9VxZm990CfU4p38RSZKk+WWwl6TFDPrwZeBH1fxGwC7A3wKPBw6PiJdm5tfalqkPzterfz7ANbX5jZZTUUmSJBWGe2nMmuw7b4v+yM190M/MS4FLaw+dDPxPRPw/4FDgKxHx3Mw8pFZmbW1+/T6b2KA2f/USqtjvdP/tKHWWJEmaaYZ7SRrM3Af9bjLzkxGxH6V1/30R8dXM/HP19OW1ov1Ox9+kNt/vNP9O9eg5BkB49EuSJM0og70kLY2j7vf2lep2E+CRtcfr4bvfYHn1Fnn720uSJPXgCPnShIhVzU4aKVv0e7uoNn+b2vyZwA2US+zdoc866s//YkT1kiRJmhmGekkaLYN+b7euzd902n1mXhsRJwF7AHtExPqZ2W1Qvr2r22tYGPRPkiRpbhnspSngYHxTzXMkentybf60tue+XN1uDjyh08IRsSPw0OrudzPz8k7lJEmSZp2n5EtSc+Yy6EfEmojYsE+ZlwGPru7+DjiurchHgb9U82+PiFu1Lb8O8AHK6f0A71pWpSVJkqZIPdgb7iWpWfN66v6bgAMj4gvA94HfUE7N3wy4K/AM4AFV2WuB/TPzhvoKMvPPEfEa4EOU/vsnRsRbKC3/OwAvBR5UFT88M48Z5w5JkiStNAO9NEuaHCRvLtufx2pegz7ALYHnV1M35wLPycwjOz2ZmR+OiB2AfwF2AT7eodg3gOcss66SJEkTyXAvSZNnXoP+I4B9Ka32twO2BW4FXA38EfgJ8DXgs5l5Va8VZeYbI+LbwN8De1bruhQ4FfhEZh4+rp2QJElqmsFemhMOxjfV5jLoZ+YvgV8C/zGi9f0A+MEo1iVJkjRpDPeSNF3mMuhLkiSpO4O9pNKi31DfeVv0R86gL0mSJMO9JM0Qg74kSdKcMtxL0mwy6EuSJM0Jg72kgUWDl9dr7DJ+88OgL0mSNMMM95I0fwz6kiRJM8RgL2kkvLzeVDPoS5IkTTnDvSSpzqAvSZI0ZQz2ksbOPvpTzaAvSZI0BQz3kqRBGfQlSZImlOFekrQUBn1JkqQJYbCXNDEcjG+qGfQlSZJWkOFekjRqBn1JkqQGGewlTYWIBgfjs0V/1Az6kiRJY2a4l+bHjTfmSldBMuhLkiSNg+Femg83zGqwt4/+VDPoS5IkjYDBXpoPMxvsNVMM+pIkSUtkuJdmn8Fe08igL0mSNCCDvTT7DPZFEERjp9R76v6oGfQlSZJ6MNxLs81gr1lk0JckSaox2Euzz3A/gGiuRT8djG/kDPqSJGnuGe6l2Waw17wx6EuSpLlkuJdml8Fe886gL0mS5oLBXppdBvsxCJobI88z90fOoC9JkmaW4V6aTQZ7qTeDviRJmhkGe2k2GeybFw0OxtfcZfzmh0FfkiRNNcO9NHsM9tLyGPQlSdJUMdhLs8lwP1ls0Z9uBn1JkjTxDPfS7DHYS+Nj0JckSRPHYC/NHoO91ByDviRJmgiGe2m2GOynm6fuTzeDviRJWhEGe2m2GOylyWHQlyRJjTHcS7PDYD/bbNGfbgZ9SZI0VoZ7aTYY7KXpYdCXJEkjZbCXZoPBfs5FNTW1LY2UQV+SJC2b4V6afgZ7aXYY9CVJ0tAM9tJsMNxLs8mgL0mSBmK4l6afwV6DcjC+6WbQlyRJHRnspelnsJfmk0FfkiTdxHAvTTeDvUYlormWdhv0R8+gL0nSHDPYS9PNYC+pE4O+JElzxnAvTS+DvZoSNNhH3+vrjZxBX5KkGWewl6aXwV7SUhj0JUmaQYZ7aToZ7CWNgkFfkqQZYLCXppPBXpPKy+tNN4O+JElTynAvTR+DvaQmGPQlSZoSBntp+hjsNbWimpralkbKoC9J0gQz3EvTx3AvaaUZ9CVJmiAGe2n6GOw1kxrso4999EfOoC9J0goz3EvTxWAvadIZ9CVJapjBXpouBntJ08agL0lSAwz30vQw2EteXm/aGfQlSRoDg700PQz2kmaNQV+SpBEx3EvTwWAv9WeL/nQz6EuStAyGe2nyGewlzRuDviRJQzDYS5PPYC9p3hn0JUnqw3AvTTaDvTQGUU1NbUsjZdCXJKmNwV6abAZ7SerNoC9JEoZ7aZIZ7KXmORjfdDPoS5LmksFemlwGe0lansaCfkTsAuwN3BvYGdgO2AS4DrgUOBs4HTgRODYzr2mqbpKk+WC4lyaTwV6aPLboT7exBv2IWA08G3gqcLv2p2vzCdyvdn9tRHwb+BTwlcy8YYzVlCTNKIO9NJkM9pI0XmMJ+hGxG/DPwL7AKhaH+uuAP1fTJcBGwC2BLYHNqzIbAY+tpvMj4j+B92fmVeOoryRpNhjspclluJek5ow06EfE7YB3A49hIdz/CTgCOAE4CTitWwt9RGwD3AfYHXgIsAdwa+DtwCsj4g3ARzLT/xSSJMBwL00qg7003YIGT933+nojN+oW/Z8B61Na7b8AfBr4VmYO9DMsM/8IfL2a3hgRtwGeDjwL2BX4AKXl/+0jrrckaUoY7KXJZLCXpMkx6qAfwIeBt2Xm2ctdWWaeBbwtIt5O6ef/OsqBBEnSHDHcS5PHYC/NNgfjm26jDvo7Z+Z5I14n1an6hwOHR8T2o16/JGmyGOylyWOwl6TpMdKgP46Q32EbF4x7G5Kk5hnupclisJfmXEBjXedt0B+5sV5eT5Kkbgz20mQx2EvS7JiooB8RGwBbABdl5o0rXR9J0mgZ7qXJYbCXpNm1qomNRMSmEfHoatq0w/NbRcQXgMuA84FLIuLAKvhLkqbU2usXT5JWzg035qJJknqJWBiQb/zTSu/t7GmqRf+JwCeAc4HV9SciYhXwTeBeLPTO2Ax4aVX2iQ3VUZI0AgZ6aTIY5iVpfjXSog88orr9UodT8p8C3Lua/z/gPdVtAI+LiEeOo0IRsVtEvCEivhMR50bENRFxRUScGRGfiIgHDrCONRGRA05rxrEfkrTSbLWXJoMt9pJGqbnW/OYu4zdPmmrRvwuQwA86PPfM6vbHwP0z8/qIWA84DrgP8CzgW6OsTEQcC+zZ4an1gb+upjURcRjw/My8dpTbl6RpZ6CXVp5hXpLUTVNBf5vq9nf1B6tAvxflIMD7M/N6gMy8LiI+BOxeTaO2Q3V7PvA5ykGFs4F1gD2AVwC3phyEWA94+gDrfES1vm7OXWplJWmlGeyllWewl9SoJlvabdEfuaaC/i2r2/aW8fsAG1GCfnur/ZnV7XZjqM8ZwOuAL2TmDW3PnRARnwSOB3YFnhYRH8rMY/us88zM/P3oqypJK8NwL60sg70kaama6qN/VXW7Tdvje1W3v87MP7Q9d/W4KpOZ+2XmZzuE/NbzF1Na9VueNK66SNKksK+9tLLsYy9JGpWmgv5vqtt92h5/PKU1v1Nr+dbV7R/HVKd+jq7N77JCdZCksTLYSyvHYC9pokXDk0aqqaD/v5SX78UR8aiI2DQiXkI5dR/giA7L3K267dXvfZw2qM13bPmXpGljq720cgz2kqSmNNVH/yDghcBmwNfanvsFnYP+vpTW/lPGW7Wu9q7N/2KA8p+IiNsDWwGXAb8GjgQ+mJnnLbUSEbFjnyLjGMNA0gwx0EsrwzAvaZo1edk7L683eo0E/cy8ICIeA/wPsH3tqd8CT8rMRf8JI2IXFi5/d2QTdWzb/irgtbWHPjvAYvvU5m9VTfcFXhERL83MDy+xOucscTlJc8pgL60Mg70kaVI01aJPZh4XEbcFHkBphb4A+H7rknpttgf+rZr/TkNVrHsZC5f1+2Jm/rhH2d8CXwR+yEIo3xl4ImUQvw2BD0VEZuZHxlRfSXPOcC81z2AvSdMnIm4D/CPlDPKdgGsoY8p9lnLJ96t6LN5v3XcEHkLpon5XymD0W1G6gv8BOBn4NPDV9sbuUYsxr3/qRMTelLMI1qUMBHjXzOw4IGBE3AK4rNuLFBH7UQ4CrEe58sAumXnhkPUZ5NT9kwHOOeccdtyxX3FJs8BgLzXPYC9pEOedey633+WvWnd3ysxzV7I+w6iyxzkAOzz746y76VaNbPf6Ky7m/E88p3V3bH+z6izzTwGbdylyJrBvZv56iev/FPCMAYp+D3hiZv5pKdsZRGMt+tMgIu4MfInyd1kLPLlbyAfIzL/0Wl9mfi0i3kw5O2Fj4LnAW4apU783uf1ZpPlgsJeaZ7CXpNkREfcEPgNsBFwBvI1ypbWNgKcCzwd2Bb4eEbtl5uVL2Mz1wInA8cBpwIXARcCWwB2AFwB3oYwHd0REPDAzb1zOfnWzIkG/6oO/B6U1emPgA9W161dM1a3gO5QX4QbgqZnZ6bJ/w/oI8GbKVQf2ZsigL2l+Ge6lZhnsJWlB0OBgfM1cX+8gSqi/Hnh4Zv6w9txREfEr4J2UsP8K4E1L2MbzunRNBzgyIj5I6SLwBEoe3g/46hK201dTl9cDICLuFRHHUk6JOBR4B/BGSt+Ferm/j4g/RsSvImK9Buq1A+V0/R0oI/0/JzO/Mop1V2cEtE7JuPUo1ilpNnnpO6lZXu5O0jisWuUZt5MmInZnYbD3j7WF/JYDWbja2gFLyaE9Qn7r+RuAd9Ue2rNb2eVqLOhX/dWPpwzGF7Wpk8MoR1t2phzlGGe9tgL+t9oWwEsy87ARb8ZfD5I6MthLzTHYSxq1dVbFzaZZ0bq8XlPTmD2uNv+JTgWqU+hbOXAL4EFjqku9S8CGY9pGM0E/IrYHDgc2AH4OPArYrFv5qj9E6xSGR42xXrcAvg3cqXrotZn5/hFvY2vKSIsA549y3ZKmj632UnMM9pJGbVZD/Rx4YHV7JdDrimrfq80/YEx1eWpt/owxbaOxPvovAzYBzgL2zMxLoe9AcscATwPuPY4KRcTGwNeBe1UPvSUz3zGGTe3PwpkL3+tVUNJsMtBLzTDMSxolg/yK2a5fC/8SRuW/Y3X76z6n19eD9x27lhpSdRb5XwPPA55dPXwx8N+j2ka7poL+Iymnrx/YCvkDaP2RbzvqykTE+pTR9VtHaQ7KzH8ech2rgS0z85QeZfYD3lDdvZoup4lImi0Ge6kZBntJo2Swb9Oro/U4trXg5KGX6FUwYkMWzrDueYAgMy+JiCspjdQ7DbqNLts9hjIYeycXA48fIhsPramgf5vq9qQhlrmsut10xHWB0o3g4dX8UcDHIuIuPcpfm5lntj22Gjg6In4IHAGcCrQuxbcz8KRqar0JX5mZ542g7pImkOFeGj+DvaRRMdTPlXqX8SsGKN8K+uPIoQD/CfzbuK8611TQb21nmDEBblHdDvJiDOsJtfkHAz/tU/4sSrDvZI9q6uYq4GWZ+ZGBaydp4hnspfEz2EsaFYP98BoaJO+mbdXch3L9+VGpD3h37QDlr6luN1rmdp9NOWAQlMH9dgNeBPwDsHNEPC8z/7DMbXTVVNC/kBKUdwZOGHCZ3avbs8dRoRH4MfB3lJC/G7A95ZSQdYFLgNOB7wIfrS6xJ2nKGe6l8TLYSxoFQ/3Uu3AJffB7WVubX3+A8htUt1cvZ6OZ+bu2h46LiA8Cn6NcWe7kiLj/iPf1Jk0F/eMofe2fDHy6X+GqD/0LKP36jxl1ZTJz2Z/+6soA/80YB1CQtLIM9tJ4GewljYLBfjxWsEV/1OqXsxvkdPxNqtuRn1memWsj4tmUM8Z3At4JPH3U24GGLq8HHFLd/k1EPKxXwSrkHwbsQgn6B4+3apJUeOk7aby83J2k5Zrl69ZrPDJzLfCn6u6OvcpGxJYsBP1zxlSfi4Hjq7uPjYj1xrGdRoJ+Zh4DfIbSP+GIiHhHROxeK7I6Iu4fEa+inPL+ZErI/1Bmnt5EHSXNJ4O9ND4Ge0nLYajXCP28ur1dRPQ6q/0OtflfjLE+F1W3G7NwRYCRaurUfYA1lBEPHw28sppa//WPqJVrfYK/CBzQVOUkzQcDvTQ+hnlJy2GQnywRZWpqW2P2fWBPSmv9vYETu5SrXw7v+C5lRuHWtflxDD7f2Kn7ZOY1mbkfpe/9b1m4MmP7dC7w4sx8Umbe0FT9JM0uW+2l8bDFXtJS2Vqvhn25Nv/sTgUiYhXwzOrupcDR46hIROzIwlXbzqrGfhu5Jlv0AcjMg4GDI+JOlNHqtwHWofSbOAX4v8z014KkJTPQS+NhmJe0VAb56VNa9JsajG+868/MkyLiOEqr/nMj4tDM/GFbsVcAd6zmD8rM6xbXMfZhIfwfmplr2p7fFdgxM4/qVo+IuAVlcPrW6P+HLWF3BtJ40G/JzJ+z0FdCkpbFcC+NnsFe0lIY6jWhDqCcjr8R8J2IeCsluG8EPBXYvyp3JnDgEta/A/DdiDiVcgbBjymXmb8e2A54APDcah7gZ8Dbl7QnA1ixoC9Jy2Gwl0bPYC9pWIb6GdZgH30a2E5mnhIRTwE+BWwOvLVDsTOBfZd5Ov3dq6mXrwPPzsyrlrGdnlYk6EfELpR+CdtRRhr8QHWZAUnqyGAvjZ7BXtKwDPaaZpl5RETcjdK6vy/lcnvXAr8GPge8bxnh+3jgEcBDKV3UdwS2peTdy4DfAScAh2fmOAf6AxoO+hFxL+C9lNMW6j4PXFwr9/fAG4G/AHdq7x8haT4Y7qXRMthLGoahXrMoM88CXl5Nwyx3DD3OPagy63eqacU1Nup+ROxHOcrxABaPst/JYZS+EjsD+zVSQUkrrj46viFfWj5HxZc0DEfBV11ENDpptBoJ+hGxPXA4sAFlAL5HAZt1K1/1ifhqdfdRY6+gpBVjsJdGx2AvaVBe3k6abU2duv8yYBPgLGDPzLwU+l6u4RjgacC9x105Sc0x0EujY5iXNCiDvIYVNDcYn+/O0Wsq6D8SSODAVsgfwBnV7W3HUyVJTTHcS6NhsJc0CEO9pKaC/m2q25OGWOay6nbTEddF0pgZ7KXRMNhL6sdQr3FZtSpY1dD7q6ntzJOmgn5rO8OMCXCL6vaKEddF0ogZ7KXRMNhL6sdgL2kQTY26f2F1u/MQy+xe3Z494rpIGgEH0ZOWz8HzJPXigHmSlqqpoH8cZYyFJw9SOCLWB15A6dd/zPiqJWlQXvpOWj6DvaReDPWaJBHNThqtpoL+IdXt30TEw3oVrEL+YcAulKB/8HirJqkbg720PAZ7Sd3YWi9pnBrpo5+Zx0TEZ4CnAEdExEHAF2pFVkfEFsADgP0pp/gn8KHMPL2JOkoy0EvLZZiX1IkhXtMoIvpdDn2k29JoNTUYH8AaYDPg0cArq6n1i+iIWrnWq/xF4ICmKifNK8O9tHQGe0mdGOwlrbSmTt0nM6/JzP0ofe9/Swn0naZzgRdn5pMy84am6ifNC/vaS0vnqfiS2nkKvqRJ1GSLPgCZeTBwcETcCdgN2AZYB/gTcArwf5nprydpRAzz0tIZ5iXVGeI1T5ocJM8z90ev8aDfkpk/B36+UtuXZpnhXloag72kOoO9pGnVSNCPiN9Ws/+Rme9rYpvSPDHYS0tjsJfUYqiXFnMwvunWVIv+jpTT83/S0PakmWe4l4ZnsJfUYrCXNMuaCvoXArcGrm5oe9LMMdhLwzPYSwJDvbQkDbbo20l/9Joadf/E6vbODW1PmnqOji8Nz1HxJTkKviQ1F/Q/SLl03ssiYr2GtilNHYO9NByDvSRDvSTdXCNBPzOPAt4G3B34WkTs1MR2pUlnq700HIO9NN9srZea07q8XlOTRqupUfffAFwDnAY8DPhtRBwP/BS4BLih1/KZ+eaxV1JqiIFeGpxhXppvBnlJWpqmBuN7E9D6tZaUEfj3rKZBGPQ1tQz20uAM9tL8MtRLkyVo8PJ6+PkftaaCPnCzV89XUzPJYC8NzmAvzSdDvSSNVyNBPzObGvRPWhGGe6k/Q700vwz20vRpsu+8ffRHr8kWfWlmGOyl/gz20nwy1EvSyjPoSwMy3Eu9Geyl+WOol6TJZNCXujDYS70Z7KX5Y7CX5kdEg4Pxee7+yBn0pYrBXurNYC/NF0O9JE2vRoJ+RNywxEXXAn8BfgWcAByWmaePrGKae4Z7qTuDvTQ/DPWS2jkY33RrqkV/qS/dRtW0HfBA4JUR8VHgHzPzmlFVTvPDYC91Z7CX5ofBXpJmW1NB/1+r20cC963mTwV+BFxU3d8a2A24O5DAycC3gc2BuwB7AesBzwNuCTy5iYpr+hnupc4M9tJ8MNRLWgr76E+3RoJ+Zv5rRPwTJeSfBOyfmT/tVDYi7g58BLgP8PXMfFn1+A7AIcBDgSdExCMz81tN1F/TxWAvdWawl2afoV6SBLCqiY1ExD7AvwOnA/t0C/kAmXkqsDdwBvCmiHho9fj5wN8Av66KPmucddb0WHv94klSccONuWiSNHvWWRWLJkmSoKGgDxxQ3b4rM9f2K1yVeSelb/9L2h7/QPX4/cZQT00Jg710cwZ7aba1h3qDvaRxag3G19Sk0Wqqj/7u1e3PhljmtOr2Pm2P/6i63WZZNdJUMdBLN2eYl2abQV6StFRNBf1bVrebD7FMq+yWbY9fXt36C3eGGeylmzPYS7PLUC9p0pSW9qYG42tkM3OlqVP3L6huHzvEMo9vW7alddDgIjRTPB1fWsxT8aXZ5Cn4kqRxayrof5vSr/7FEfGYfoUj4m+AF1Fa7dtH1r93dXvuSGuoxjmInrSYwV6aTYZ6SVOpyf75fjWOXFNB/63AFZSuAl+OiP+JiP0iYvuIWLeatq8e+wzwparslcDb29b1t5QDAEc1VHeNkMFeKtpDvcFemg221kuSJkEjffQz85yIeBzwFWAT4MnV1E0AVwFPyMyzb3owYhdK+D+WcjBAE85ALxUGeWn2GOIlSZOqqcH4yMyjIuJuwH8A+wHrdCl6I/A14OWZ+Zu2dfwGeNBYK6plMdhLhcFemj0Ge0nzJCIaHIzP79dRayzoA2Tm74DHR8T2lMB+FxZG1b8EOB04JjPPa7JeWh7DvWSwl2aNoV6SNM0aDfotmXkB8OmV2LaWz2AvGeylWWKol6SbC5q77J3fwqO3IkFf08VgLxnspVlisJckzboVCfoRsRHlMnnbARsDX87My1aiLurMcK95Z7CXZoOhXpI0jxoN+hGxE+VSe08G1qs99SPg57VyzwVeAPwFeHhm+ot7zAz2mncGe2n6GeolaXQcjG+6NRb0I+K+wNcpg+/VX8lOv66PAN5PORjwcODbY6/gnDHYa94Z7KXpZ7CXJKmzVU1sJCK2AL4C3BK4EHgxcNdu5TPzj8A3q7v7jr2Cc2Lt9QuTNG9uuDEXTZKmyzqr4maTJGl8IpqdNFpNtej/I7ANcDGwR2aeDX1P0TgSeCyw+9hrN6MM9JpnhnlpehniJUlanqaC/mMop+j/RyvkD+D06naX8VRpNhnuNa8M9tL0MthL0uSxj/50ayroAb1LwAAAIABJREFU3666PXaIZS6pbjcfcV1mliFf88JQL00vQ70kSePXVNDfsLq9bohlNqlurx5xXSRNGYO9NJ0M9ZLm0bXX3bjSVZAaC/p/BHYEbgucPOAy96huzx9LjSRNLIO9NJ0M9pLmyTUzHug9dX+6NTLqPnBidfuoQQpHeaWfT+nXf9y4KiVpMjgivjR9HAVf0jy55robbzZJk6ypoP/fQADPiIh79CsMHAjcvZo/dGy1krQiDPbSdDHUS5oXnQL9vIZ6L6833RoJ+pn5FeBoSleB70bEiyJim1qRdSNih4h4ckQcBxxAac3/Ymb+oIk6Shofg700PQz1kuaFgV6zrKk++gBPBL4L3BN4XzW1fvGf0lY2gBOANU1VTtLoGOal6WGQlzTrDPBLYx/96dbUqftk5qXAHsDbgMsoYb7TdDXwTmCfzLyyqfpJWjpb7KXpYGu9pFlnK71UNNmiT2ZeC7w+It4K7A3sBmwDrAP8idKyf2Rm/qXJekkajmFemnyGeEmzzAAv9dZo0G+pWuq/UU2SJpzBXpp8BntJs8pQv0KaHCTPf2EjtyJBX9LkMtRLk89QL2kWGeil0ZnboB8RuwGPBh4I3AnYGrgOOB84HvhYZn5/iPU9CtgfuE+1rouAk4GPZOY3R1t7aXQM9tJkM9RLmkWG+snnYHzTbaRBPyKeOcr1tWTmYaNcX0QcC+zZ4an1gb+upjURcRjw/GpsgW7rWgV8BHhu21O3rqbHRcRHgRdkpt9oWnEGe2myGewlzRIDvbQyRt2ifwgLl8wblQRGGvSBHarb84HPAccBZ1MGBdwDeAUlpD8TWA94eo91vYWFkH8K5YoBvwF2AV5NuZzg8ygt/K8b5U5IgzDYS5PLUC9plhjqZ0vQXB99/xuO3jhO3Z+G1+kMSuj+Qmbe0PbcCRHxScrp+7sCT4uID2Xmse0riYhdgVdWd38E7JWZV1f3T46IrwLfo1xd4FUR8fHM/PUY9ke6icFemkyGekmzwkAvTb5RB/3b9nhuS+DDlD7sPwMOBU4C/lA9v2313LOAu1L6t78AuGTEdSQz9+vz/MUR8QrgiOqhJwE3C/rAS1n4G76kFvJb67kqIl4C/LAq9zLg75dTd6mdwV6aPIZ6SbPCUC9Np5EG/cw8q9PjEbE+8AXKaexvAN6Sme3p5EzguIh4D6W1/d+Ag4EHjLKOQzi6Nr9L+5NRRox4bHX3jMw8odNKMvOEiPgl/5+9+47TrKzv///6zNJbWEBEQUVBBTUmRJqKgI2oiBA1QROjIERjoiEGjTEm+aKJxhI0/NQYC1LERqIUg4XYUBB1NXZEiiBNOigssIX9/P44Z9x7hpm7zbmvu72e8ziP065zrmvYZXbe93Wd68AjgUMj4pULfO9S1wz20ugx2EsadwZ6zTcTwUyhsful6pkmM4XqeRXwe8B/Zea/tAu6WXkzcHp9zTGF2jjfxi3b84f3QzV6YfZZ//M63Gv2/I7AzktrlqbNvetyziJpuJbNxH0WSRonq9asu88iabKUCvp/TDWp3sk9XHMS1fP+LxhEg7pwQMv2Txc4/6iW7Ys73Kv1/O59t0gTb36oN9hLw2WolzTOFgr0hnp1K6LsomYNYjK+hcwOfb+hbam5bpx3bTH1K/P+ruXQ6QsU26ll+5oOt7y6ZftBPbZlpw5FdujlfhotBnlptBjkJY0rA7ykVqWC/uxvTg+negVdNx4+79qSXg3sXW9/OjO/u0CZLVu27+xwv5Ut21v02JarOxfRuDDYS6PDUC9pHBnoJXWjVND/KdWM+n8dEf+dmW1/QtU96q9uubaYiDgAeGu9eyPwikWKbtKyvbrDbVe1bG/aZ9M0hgz20mgw1EsaR4Z6DVNEEIXG1JeqZ5qUCvqnUvWQ7wOcGREvy8zrFyoYEfeneg3fPlTP9Z9aqI1ExKOBM6j+u9wD/GFm3rhI8XtatjfqcOvWif3uXrTUwjoN9d+B6lWEGgEGe2n4DPWSxo2BXlLTSgX9/6SaVG8/4GDg5xFxLlVAvZEq0N+fqtf/INYH4wvqawcuIh4KnAssp5pl/wWZ+bU2l9zRst1pOP7mLdudhvnPkZltn//306/hMthLw2ewlzRODPUaFzNRLaXqUrOKBP3MXBcRzwQ+CjyHatj7IfUy3+wf82eAP+k0zL8JEfFA4ItUr8tL4KWZeVaHy1oDeKcJ81p75X3mfowZ7KXhMtRLGhcGeknDVKpHn8xcCRwWEQdTPfd+ILDZvGJ3A18F3peZ/1OiXRGxHfC/wMPqQ6/KzG4eF7ioZXu3DmVbzxedc0BLY7CXhsdQL2lcGOo1kaLg6GH/yW9csaA/KzPPAc6pJ9zbBdimPnUbcHlm3luqLRHxW8AXgEfVh/4uM9/b5eVXANdRjQI4oEPZ/ev1tcCVPTZThRjqpeEy2EsadQZ6SeOieNCfVQ/Jv3RY9UfEZsA5wO/Vh96cmW/r9vrMzIg4i2p0wm4RsW9mfnOBevZlfY/+WZlpmhwRBntpeAz1kkadoV7SOJsZdgOGISI2oppd/4n1oRMy8x/6uNW/U03cB/DuiJjz6rx6/9317tq6vIbk3nU5Z5FUxrKZuM8iSaNi1Zp1Cy7StIsou6hZQ+vRH7KPU83uD/Bl4MSIeEyb8qsz85L5BzPzkoh4B/B3wJ7ABRHxNuByqscSXgfsURd/R2YObQTDNDLMS+UZ4iWNMgO8pGnRaNCPiB8Ab8zMTzd53/reOwKvB67KzLcv8XbPbdl+CvDDDuV/Aey8yLk3ANsDL6UK9Z9YoMyJQD8jBtQDg71UnsFe0igy0EtLF/VXqbrUrKaH7v828F8R8cOIODIitlrqDSNi74h4P3AZ1fPwmyz1nk3KzHWZeRRwMHAW1QR9q+v1WcCzMvPoEq8JnDYOxZfKcgi+pFHksHtJuq+mh+4fDbwFeAzwIeC9EfE/wKeBb2bmlZ1uEBGbUw2DfyrwQta/9i6Bj1L1ji9JZjb+22lmfhb4bNP31XqGeakcQ7ykUWOAl8qaiWopVZea1WjQz8wPR8QngWOAVwPbAs+rFyLiFuD7wI1Ur9O7DdiU6hV7y4FHAI9k/UiD2T/yzwGvz8xOQ+w1IQz1UjmGekmjxlAvSUvT+GR8mbkSeEtEvBP4U6pn1/epT29H1VO/mNbfNm8CTgU+uNBEeJosBnupHIO9pFFhoJekwRjYrPuZeQ/wQeCDEfFg4EDgScATgJ2ALVuKrwVuBn4EfL1evpGZawbVPg2XwV4qw1AvaVQY6qXxEhFEoffelapnmhR5vV5mXkXVO3/q7LH6XfbbAPdk5u0l2qHhMdhLg2eolzQKDPSSNHxFgv5CMnM1cP2w6tdgGeylwTPYSxo2Q700uQIo1dHubzTNG1rQ12Qx2EuDZaiXNEwGekkaLwZ99cVgLw2OoV7SMBnqJQHMRDBTqEu/VD3TxKCvjgz10uAY6iUNi4FekiaXQV/3YbCXBsdgL2kYDPWSNF0M+jLYSwNiqJdUmoFeUmOi3GR8zsbXPIP+FDLYS80z1EsqyUAvSWrHoD8FDPZSswz1kkoy1EsahoggCnXpl6pnmhj0J5DBXmqWwV5SCQZ6SVJTDPoTZN26NORLS2Sol1SCoV7SqIuCz+jbod88g76kqWWolzRoBnpJ0jAMLehHxAywDbAZcG1m3justkiafIZ6SYNmqJckjYqiQT8ilgFH1MtewIZAAo8FLmop92xgf+BXmfnmkm2UNBkM9pIGxUAvaRrMRDBTaEx9qXqmSbGgHxHbA2cC+9D5TYlXAmcDGRHnZOb3B9w8SWPMUC9pUAz1kqRxNFOikron/zPAvlQ9+KcDr1ysfGb+GPhWvfsHA2+gpLGxbCbus0jSUq1as27BRZKmVRRe1KxSPfovoRqqvwZ4TmZ+ASAi3tPmmrOpev/3G3zzJI0iQ7ykQTDAS5ImXamg/0Kqnvz3z4b8LnyvXj9yME2SNEoM9ZKaZqCXJE2rUkH/sfX67B6uubFeb9twWySNAIO9pKYY6CWpeRFBFJokr1Q906RU0N+6Xt/SwzXL6rWv3ZPGnKFeUlMM9ZIkdVYq6N8KbA88iPVD8jt5eL2+aSAtkjQQhnpJTTDQS9JwzUS1lKpLzSoy6z7wk3q9Vw/XHE71XP+K5psjqQnOgC+pCc52L0lSs0oF/TOp3prwyohY3qlwRDwfOKTe/dQgGyape4Z6SUvhK+wkaXzMPqNfalGzSgX9DwJXAVsB50bEoxYqFBHbR8SbgY9R9eb/GDi9UBsltbC3XtJSGOglSRqeIs/oZ+aqiDgU+CrwOOBHEfGzliKnRcQWwMOoev6DauK+52VmlmijNM0M8ZL6ZYCXJGn0lJqMj8z8QUTsBZwCPB7YreX071CF+1nfBv44M39eqn3StDDUS+qHgV6Spo8j6sdXsaAPkJmXAU+MiP2A5wB7Us3Gv4yqB/97wNmZ+b8l2yVNMoO9pF4Z6iVJGm9Fg/6szDwfOH8YdUuTzFAvqRcGeknSYkpOkudkfM0bStCXtHSGekm9MNRLkjQ9DPrSGDDUS+qWgV6S1ISZqJZSdalZBn1pxBjqJXXLUC9JkhbSaNCPiHubvF8tM9MPJDSxDPaSOjHQS5KkXjQdoE0sUhuGekntGOglSaMiotwkec7F17ymg/4bG76fNLYM9ZLaMdRL0njbeMOZBY9vtMhxqaRGg35mGvQ1lQz1khZjoJek8bZYoJ90Qbnh2v4m3TyffZd6ZKiXtBhDvSSNp2kN85pcBn2pA4O9pPkM9JI0fgzzvZmJYKbQw/Ol6pkmBn2phaFeUisDvSSNHwO9VCjoR8SL+7gsgXuAXwGXZuYVzbZK085QL6mVoV6SxodhXmqvVI/+yVTBvW8RcRNwCvDWzLytiUZpehjqJc0y0EvSeDDMD1f1er1ydalZJYfuL/WPb3vgNcCLIuKZmfnDBtqkCWSolzTLUC9Jo80wLw1GqaD/UGBr4D+BfYD/Az4CfAe4qS5zP2BP4E+B3wO+BfwFsA54DPBC4FnAA4BzImK3zFxZqP0aYQZ7SQZ6SRptBvoxFEHYpT+2SgX964BPAnsBx2bmuxYocwlwAXBCRBwLvAP4APDEzPwB8NGIOLo+9kDg5cA7SzReo8NQL003A70kjS7DvDQ6Sv3f+JfA3sBHFwn5c2Tm8cBHqXr2j2k5/iHgLKrHAJ4zmKZqVCybifsskqbHqjXr7rNIkoZr4w1nFl2kcRARD4mI4yPi4ohYGRG3RsSKiHhtRGy2xHtvFhHPjYj31fe8LSLWRMQtEXFhRBwXETs09b20U6pH/0+oJuM7rYdrPlJf9wKq3v1ZnwAOBXZvrHUaOkO8NL0M8JI0egzumsTJ+CLiEKpMulXL4c2oHiHfEzg6Ig7OzMv6uPdjqUaob7HA6W2Afevl1RHxssz8ZK919KJU0N+1Xt/UttRcs2V3mXf88nq99ZJapKEx1EvTy1AvSaPDMK9pEhF7UD1OvilwJ/CvwFfq/RcAfwY8gmo+uD0z844eq9iK9SH/AuB/qOaku4VqPrrn1nVsRfVY+q8z83NL+qbaKBX0Z3+K7Ap8r8trZj8cmJ8KZ39L7PU/vIbEYC9NHwO9JI0Gw7z6NRPBTKGu9kL1nEAV6tcCB2XmhS3nvhwRlwJvpwr7xwLH9Xj/dcDpwBsz86IFzp8bEZ8DzgCWAe+OiIdn5pJeQ7+YUv/nX1yvX9lN4aimd/yrevdn804/pF73MjpAhfhcvTRdFnqO3pAvSWX53LzUXkTsDTyp3j1xXsifdTzw03r7mIjYsJc6MvMbmXn4IiF/tsxZwKfr3V2APXqpoxel/u//KFXP/H4RcXpEbLtYwfrc6cATWfi5/gPr9aL/AVWGoV6aLgZ6SRouw7xKmn1Gv9QyYIe1bJ+0UIHMXAecWu9uDTx5QG35Ssv2/MfUG1Nq6P57gRcC+wDPA54VEZ8Hvsv6nvn7AY8DnkE1pALg2/W1AETEJlTPTyTwhSItF+Dwe2maGOAlaXgM7tJA7FevV1Jl0MWc17L9RODcAbRl45btewdwf6BQ0M/MeyPiIKrJD55BNbPhH9TLfLOJ8lzg8Mxs/ea3Af623v7MgJo79Qz10vQw1EtSeYZ5qa0dokMXf2Ze0+M9Z9/Ydllmrm1T7uKW7UG95e2Alu2fLlpqiUr16FPPWvisiDgUeDnVN7jpvGL3AF8D3p+ZZyxwj+uAUwbd1mljsJcmn4FeksoyzGvcBUGnwN1kXS1WdHVJt/euRoVvV++2/YAgM2+LiJXA5sCDuq2jh7b8DnBwvfujzBz/oD+rnoDgrIhYRvVMwvL61G3A5fN68NUwQ7002Qz0klSWgV4aeVu2bN/ZRfnZoL9Fp4K9iIiNgQ9RzbgP8IYm7z9f8aA/qw70lwyr/mlgqJcmm6FeksowzGsazVBu5vZ59ewFXN/g7Tdp2V7dRflV9Xr+6POleg+wZ719SmYO9FH0oQV9NW/Gme+liWSgl6TBM8xLI+P6Pp7Bb+eelu2Nuig/O1ne3U01ICJeDxxd764A/rKpey/GoC9JI8JAL0mDZZiXuhdR8Bn9wdZzR8t2N8PxN6/X3Qzz7ygiXg68pd69GHhWZq5s4t7tFA36EbEt8CLgScDDqJ6XWNb2IsjMHNj7BSVpGAz1kjQ4BnpJszLznoi4BdgW2Kld2YhYzvqgf/VS646IFwL/Ue/+Anh6Zt681Pt2o1jQj4g/BD4AbDV7qMtLczAtkqTBM9BL0mAY5iX14CKqzuZdI2KDNq/Y261le0kz4kfEc4BTqaYg+CXw1IYfSWirSNCPiH2Aj1F9kwFcB3wPuBXwt2BJE8FQL0nNMsxLwxMBpab/KvCEwPlUQX9z4HHAtxYp1/qO+wv6rSwingqcTpW3b6Hqyb+83/v1o1SP/uuohujfDfxZZn6sUL2S1DgDvSQ1xzAvqYAzgdfX20eyQNCPiBngxfXu7cBX+qkoIp4AnEU1qd+vgN/PzJ/0c6+lKPWT9QlUQ/DfasiXNC5WrVm34CJJ6t3GG84suEgaTTNRdhmkzPw28PV696iIePwCxY4Fdq+3T8jMNa0nI+LAiMh6OXmheiLid4FzqEYOrAQOzszvNvE99KpUj/7W9foLheqTpJ4Y4CVp6QzukkbYMVTD8TcFzo2It1D12m8KvAB4WV3uEuD4Xm8eEbtQ5d3Z7PsPwK8i4jFtLrsxM2/sta5ulAr6vwQejBPrSRoyA70kLY1hXpoOE/R6PQAy83sRcThwGtUE8W9ZoNglVL3wdyxwrpMnAdu37L+ri2veCBzXR10dlfpJ/cV6/bhC9Umacg67l6T+LTbM3pAvaZxl5meAx1KF8EuAu6iex/8O1bxye2TmZcNrYXNK9ej/G/DHwGsi4rTMvLNQvZKmgAFekvpjcJc0bTLzF8Df1Esv132VNq+Iz8yTgZOX0LRGFQn6mfmziPgTqlfsfSkiXjqMmQcljTcDvST1zjAvqR8lJslrrUvNKhL0I+LD9eZFwF7ADyPiR8DFVMMl2snMPGqQ7ZM0Wgz0ktQbw7wkqVWpoftHsH4ivqQa8vDb9dJO1OUbD/oRsT2wd73sVS/b1qdPycwjurjHEcBJXVZ5ZD2cQ1ILQ70kdccwL6mkiGopVZeaVSroX8Xozbh/w7AbIE0TA70kdcdAL0laqlLP6O9cop4luIrqMYKDlnCP3weua3P+miXcWxorhnpJas8wL2nURQQzE/R6vWlTqkd/FL0JWAGsyMwbImJn4Iol3O+SzLyygXZJY8NAL0mLM8xLkoZlaoN+Zv6/YbdBGhcGeklamGFekjSKpjboS1qYoV6S5jLMS5pGM/VSqi41a2hBPyKWAcuBTalm119UZl5VpFHSFDHQS9JcBnpJ0qQoGvQjYjvgVcBhwKPo7sObZDxGHpwUEY8EtgN+DVwGfBF4X2ZeO9SWaaqtXruOHLV3XkjSkBjmJak7vl5vvBUL0BHxBODTwP3o0IM/pg5s2d62XvYBjo2Iv87M9/dz04jYqUORHfq5rybT6rX20kuSYV6SNO2KBP2I2BY4iyr83gl8CLgdOI6qx/5oYBtgT+A5wCbABcCJJdq3RD+n+gDjQuDq+tjDgOcBz6f6Xv4zIjIzP9DH/a/uXETTxkAvadoZ5iVJWlypHv1XUoX8VcDjM/MnEfFoqqBPZp40WzAiHgB8DNgfuDAzX1eojf04Azgl8z4Do1cAn4yIZ1N9CLAh8K6IODszry/dSI0vA72kaWegl6ThmCGYKTSmfmYiB3wPV6l/PZ9J1XP/4cz8SbuCmflL4FnA5cBrIuIpBdrXl8z81QIhv/X8/wBvqnc3A47qo5oHdVj26uOeGkGr1667zyJJ02DjDWcWXSRJUu9K9ejvWq+/2HLsNwE5IpZl5r2/OZF5d0S8C3gv8OfAl4u0cjA+QBX2AzgAeHMvF2fmNe3OhzNXjB0DvKRpZGiXpPHiZHzjrVTQ36pe/6Ll2D0t21tSPbPf6jv1ep9BNaqEzLwxIm6hmo1/x2G3R+UY6CVNG8O8JEmjoVTQvxP4rXn13dqyvTPw/XnXbFKvtx9cs4rx5WYTzlAvaVoY5iVpOsxEtZSqS80q9a/1ZfX6wbMHMvN2YHZiuicvcM1+9XrlANs1cBFxP6refIDrhtkWLd1Cz9Eb8iVNIp+ZlyRpfJX6F/tb9Xr+xHGfp3p2/W8j4uGzByNiX+C1VD3hK4q0cHBeBr+ZRvK8YTZE3TPQS5oGToInSdJkKvUv+Reowu5z5x1/J7CWanj+TyJiRURcBHwd2Louc0KhNvYkInaOiD06lHk28E/17t3ASW2Ka0gM9JImmWFektSPCJiJKLI4GV/zSj2j/wXgVGBZRDw0M68AyMwfR8QrgPfVbXncvOuOy8zPD6JBEbEf698GAOuH1wPsGhFHtJbPzJPn3WJn4CsRcSHwGeAHwI31uYcBz6+X2b+2r8nMa5tou/pjgJc0qQztkiSpVZGgn5lrgCMWOXdiRJxfn3903aZLgY9k5ncWuqYhRwMvWeTcE+ul1cmLlH18vSzmLuDVmfmBnlqnvhnoJU0iw7wkqSRfrzfeSvXot5WZPwNeP+x29Oi7wIuoQv6ewAOoRgVsANwG/AT4EvChzLxxsZtoaQz1kiaNgV6SJC3VSAT9YcjMI1hklEGX198BfLReNGAGekmTxDAvSRp1vl5vvE1t0NdoMtBLmhSGeUmSNCwGfQ2NoV7SuDPMS5KkUWTQ18AZ6CWNM8O8JGkaRf1Vqi41y6CvxhjoJY0zA70kSZoUBn31xVAvaRwZ5iVJ6o6T8Y03g77aMtBLGjeGeUmSNO0M+gIM9JLGi2FekqTBioI9+mGPfuMM+lPIUC9pHBjmJUmS+mPQn2AGeknjwEAvSZLULIP+BFmzdp3hXtJIMsxLkjReIoIoNKa+VD3TpHjQj4gZ4FHAw4AtgWWdrsnMUwfdLknS0hjmJUnT4OY7Vrc9f9ud7c9LJRQL+hGxKfAPwJ8B2/ZwaQIGfUkaAYZ5SdKk6xTkp8UMBV+vV6aaqVIk6Nch/8vA3oDjMiRphBnmJUmTyhCvaVGqR//VwD719o+B9wDfBW4FfKhckgozzEuSJpFBvjkR5V575yP6zSsV9A+v198AnpKZ/h8oSQUY6CVJk8IQL3WvVNDfhepZ+7cb8iWpWYZ5SdIkMMhLzSkV9FcDmwJXFapPkiaKYV6SNM5uvmNVm7OO2x5FMxHMFBpTX6qeaVIq6F9M9Yz+DoXqk6SxY5iXJI2j9iFe0jCUCvonA/sCfwh8vlCdkjRyDPOSpHFjkJ9OM1Hw9Xp26DeuVND/IPBHwIsj4ouZ+fFC9UpScYZ5SdK4MMRLk6lU0H8Q8CqqwH9aRPwB8DGqIf13dbo4M322X9LIMdBLkkadQV6aTqWC/pVUs+5DNdvG8+qlG0m5dkrSHIZ5SdKoMsRroKLg++0dut+4kgE6FtmWpKEyzEuSRpFBXlK/SgX9IwvVI0kLMsxLkkaJIV6jboZgplD/bKl6pkmRoJ+Zp5SoR9J0M8xLkkaFQV7SMPnsu6SxYpiXJA2bIV7TIAo+o19sLoApYtCXNHIM85KkYTHES5oEQwn6EXF/4EDgMcA29eFbgR8DX83MG4bRLkllGeglSaUZ5CVNg6JBPyIeALwTeG6butdGxKeAYzPzl8UaJ2kgDPOSpFIM8VJzZqJaStWlZhUL+hHxO8AXqXrw2/1RbggcDjwtIp6amT8q0T5J/TPMS5JKMMhLUneKBP2I2Bw4B9i2PvRF4IPAt4Dr62M7AHsDRwMHAdsB50TEbpl5V4l2SlqcYV6SNEiGeGm0zEQwU2iWvFL1TJNSPfqvBB4IrANenpknLlDmqnr574h4KdUHATsCfwm8o1A7palmmJckDYpBXpLKKRX0DwUSOHmRkD9HZn44Ip4AvBT4Awz6UmMM85Kkphnipcnj6/XGW6mg/4h6/Ykervk4VdB/RKeCku5row0M9JKkZtz067lB3l/KJWm0lQr6W9TrW3u45rZ6vXnDbZEmhmFekrRU80O8JGn8lQr6N1E9o7878H9dXrNbvb55IC2SxoRhXpLUL0O8pH4F5Sbji7YvZVM/SgX9bwLPA/4mIj6ZmWvbFY6IDYC/oXqu/5sF2icNlWFektQPg7wkaSGlgv6pVEH/d6lemXdkZl63UMGIeCBwIvB71BP4FWqjNFCGeUlSLwzxkobJyfjGW5Ggn5mfiYgzgcOApwE/j4hzgW8BN1IF+vsD+wBPBzaqLz0jM88p0UapCYZ5SVK3DPKSpEEp1aMP8EKqnv0/pAryB9fLfLOf5/wX8OIyTZO6Z5iXJHViiJc07mbqpVRdalaxoJ+Zq4DDI+JU4C+AA4DN5hW7CzgPeG9mfrZU26T5DPOSpMUY4iVJo65kjz4A9VD8cyJiGfAwYJv61K3AzzPz3tJt0vQy0EuS5jPIS5LGXfGgP6sZub+KAAAgAElEQVQO9JcOq35ND8O8JGmWIV6SuhMRRKnX6zkbX+OGFvSlJhnmJUlgkJckCQz6GiOGeUmaboZ4SSonWD9Leom61KxGg35EfLjezMw8aoHj/ZhzL002w7wkTS+DvCRJzWi6R/8IIOvtoxY53ouorzPoTxDDvCRNH0O8JEnlNB30r2LhQL/YcU0ow7wkTQ9DvCRNnpkIZgpNkleqnmnSaNDPzJ17Oa7xZpiXpOlgkJckabw4GZ86MtBL0uQyxEuSFmM/+/gy6AswzEvSpDLIS5I0fYoE/Yi4AlgH/H5mXtblNQ8Gvko16/4uA2ze1DDMS9JkMcRLkgYlolpK1aVmlerRfwjVZHwb9XDNhsDOOIlfTwzzkjQZDPGSJKlfDt2fIBsa8iVpbBjkJUnSoIxy0P+ten3XUFshSVKPDPGSpHFXDd0vM6beofvNG+Wg/6J6/YuhtkKSpHkM8pIkaZQNJOhHxJcXOXVSRKzscPnGwMOA7amezz+3ybZJktSOIV6SJJipl1J1qVmD6tE/kCqktw7CCGCvHu/zc+BfG2qTJGnKGeIlSdI0GFTQ/xpzZ8s/oN7/LtCuRz+Be4BfAt8APpGZnUYASJIEGOQlSWpKRBR8Rt+H9Js2kKCfmQe27kfEunrziMy8aBB1SpImmyFekiSpO6Um4zuVqrf+tkL1SZLGiCFekiSpOUWCfmYeUaIeSdJoMshLkjRegrkTrg26LjVrlF+vJ0kaA4Z4SZKk0VIk6EfEbwNnAfcCB2bmtR3K7wicR/XhzjMz85LBt1KStBCDvCRJ08fJ+MZbqR79FwE7A1/oFPIBMvPaiLgE+P362n8abPMkaToZ4iVJkiZPqaA/+3q9s3u45izgGcBTMehLUs9uvmMVmZ3LSZIkzTdTL6XqUrNKBf1H1Osf9nDNj+v1IxtuiyRNhJvvsDdekiRJ91Uq6G9Rr+/s4ZrZsls13BZJGnmGeEmSJPWrVNC/DdgO2AH4QZfX7FCv7xhIiyRpSAzxkiRp5BWcjA8n42tcqaB/KVXQfwbwhS6veWa9vnwgLZKkATHIS5IkaZhKBf0vAE8AXhYRH8jMn7YrHBGPBv6MagK/zxdonyR1xRAvSZKmQdRLqbrUrFITHL4PWAlsAnw5Ip69WMGIeA7wRWBT4G7gvYNoUERsHxHPjog3RcTnIuLmiMh6ObmP+z0zIs6IiGsiYlW9PiMintn5akmj4uY7VrVdJEmSpFFXpEc/M2+OiD8HPgJsD5wVET8Hzgd+WRd7APAk4KFUH+ok8IrMvGFAzWrkvhExA3wAOGreqR3r5bCI+BDw8sxc10SdkvpjUJckSepOUO7ReXv0m1dq6D6Z+dE6FL8P2AzYBXjYvGKzf8YrqUL+aYWadxVwMXBQH9e+mfUh/3vA26nmFdgF+FtgD+Bo4Cbg75fcUkkLMsRLkiRJlWJBHyAzPxIR/wv8FXAw8BjWh/t1wI+AzwDvGWBP/qw3ASuAFZl5Q0TsDFzRyw0i4hHAa+rd7wD7Z+bd9f6KiDgbOA/YE3htRHw4My9rovHStDHIS5KkcbB8i42G3QSpbNAHyMzrqXq2/z4iNgC2qU/dmplrC7bj/zVwm79m/X/DV7WE/Nk67oqIVwEX1uVeDfxlA/VKE8UQL0mSRtV2W/YW3K/51YAaUtgMwUyhQfWl6pkmxYN+qzrY3zjMNvQrqpdKHlrvXpyZ31yoXGZ+MyJ+BjwSODQiXpmZWaqd0rAZ4iVJ0qjpNbxL42aoQX/MPRR4YL19Xoey51EF/R2BnenxEQFplN18x+o2Z/1MS5IkDZ7BvXkRBSfjs0O/cQb9/j2qZfviDmVbz++OQV9jon2IlyRJGhzDu9S/4kE/Ip4MHAb8DrAdsCnt36iQmblLibb1aKeW7Ws6lL26ZftBvVQSETt1KLJDL/eTZhniJUlSSdttufGwmyBNjWJBPyK2Bz4BHDB7aJGiOe/cqI793bJl+84OZVe2bG/RYz1Xdy4i3ZdBXpIkDZrhfXJF/VWqLjWrSNCPiA2BzwG/SxXivw9cS/WKvQROo5p9//eAB9TH/g/4cYn29WmTlu1Oiap1NrJNB9AWTRlDvCRJGgSDuzQZSvXoHwHsQRXgj8zMUyLi0VRBn8x8yWzBiDgMeA/VM/BvzcxPFWpjr+5p2e70AFHrT8y7Fy21sE5D/XcAVvR4T40wQ7wkSWqS4V39cDK+8VYq6D+vXn8+M09pVzAzz4yIHwHfAU6OiB9m5qUDb2Hv7mjZ7jQcf/OW7U7D/OfIzLbP/4f/V4wdg7wkSVoKg7ukTkoF/d9h/RD9+4iIaH23fGZeHhEnAP8EHAO8skgre9MawDtNmNfaK+8z9xPMEC9JkvpheNeoCYIZn9EfW6WC/jb1uvW1cq2JaDPmTlgH8CWqoP/0AbZrKS5q2d6tQ9nW8z8dQFtUiEFekiR1w+AuaZhKBf3VdV2tKenXLds7ApfMu+aelnOj6ArgOuCBrH+TwGL2r9fXAlcOsE1aAkO8JElqx/AuaVyUCvpXUfVq33/2QGbeEBF3UD3fvg/3DfqPmS1apIU9ysyMiLOAVwC7RcS+mfnN+eUiYl/W9+if1fqIgsq55c7FQ7x/IpIkTSeDu7Q4J+Mbb6WC/v9Rhd09qF6zN+trVDPvHxMRp2fmKoCI2Bp4HVXIv4jR9e/Ay4BlwLsjYv/M/M2s+hGxKfDuendtXV4D0C7IS5Kk6WF4l6RyQf9LwJ9Qhfq3tBz/z/rYHsAPI+JsqhnqD6Easp/AqYNoUETsB+zacmi7lu1dI+KI1vKZefL8e2TmJRHxDuDvgD2BCyLibcDlwC5UH1bsURd/x4i+PWDkGeIlSZpeBndpOOzRH2+lgv6ZwHHAThGxS2ZeDpCZ50TEh4GXAg8H/qYuP/tHfS7wvgG16WjgJYuce2K9tDp5kbJvALan+h72AD6xQJkTgX/ovYmT79ZFQryj6SVJmkwGd0kavCJBPzNvB3Ze5NzREXEhVfB+dN2mS6l68k/IzHUl2tivun1HRcSnqIbx70U1OuBmYAXw/sz8XJtbTLTFgrwkSZochndp8kT9VaouNatUj35bmXkiVa93yTqPAI5o8H6fBT7b1P3GgSFekqTJdL+tDO6SNM6KBP2ImH293C99Tn08GOIlSZoshndJmh6levS/SvXY9VFUw/I1ZAZ5SZLGm8Fd0iDNRLWUqkvNKhX076SaTf9HheqbaoZ4SZLGk+FdktSEUkH/KmB3YLNC9U2l21euZjNDviRJI8PgLmlcORnfeCsV9M+hCvpPA75eqE5JkqTGGd4lSaOuVNB/F9V75v86Iv4rM39cqF5JkqS2DO6SdF8R1VKqLjWrSNDPzOsj4tnAp4ALIuJtwMcy88oS9UuSpOlhcJckTbtSr9f7eb25EbAl8M/AP0fEncDtwL1tLs/M3GXATZQkSSPM8C5JUvdKDd3fed7+7OCMLeulnWy8NZIkaagM7pI02oJyk+Q5cr95pYL+KYXqkSRJQ2J4lyRpNJR6Rv/IEvVIkqTmGNwlaXpFwIyT8Y2tRoN+RPxVvfmRzLytyXtLkqSlM7xLkjT5mu7R/3eqZ+q/CPwm6EfEl+vjL83MXzRcpyRJU8vgLklS9yLiIcBfAQcDDwJWAZcDpwPvzcy7lnDvGWA3YO962Qt4LNWk9ABPzsyv9t34HpR6Rv9AqqC/eaH6JEkaSwZ3SdIoiPqrVF1F6ok4BDgN2Krl8GbAnvVydEQcnJmX9VnFnwInL6mRDWk66N8DbAxs3fB9JUkaW4Z3SZKGKyL2AD4JbArcCfwr8JV6/wXAnwGPAM6JiD0z845+qmnZXgP8CNgQ+O0lNL0vTQf9K4FHAs8GvtHwvSVJGgkGd0nSpIsoN0leoXpOoAr1a4GDMvPClnNfjohLgbdThf1jgeP6qOMiqscCVgDfz8x7IuI4JiDof5bqmYTXRcRTgUuoPsmY9S8RcXuP98zMPKqpBkqStBDDuyRJkyki9gaeVO+eOC/kzzoeOBLYHTgmIt6cmWsWKLeozPw28O0lNbYhTQf9twDPAXalmnhgz5ZzARza4/2C6tl+g74kqScGd0mS+hdQ6Mn5IvUc1rJ90kIFMnNdRJxKNaR/a+DJwLmDb9pgNBr0M/PWiNgTeCXwVGBHqmf2H0IV2H/J3B5+SZK6ZniXJEl92K9erwS+26bceS3bT8Sgv15m/pqqZ/8ts8ciYl29eVBmXtR0nZKk8WRwlyRJ8+wQHR7az8xrerzn7vX6ssxc26bcxQtcM5ZKvV5PkjQFDO6SJE2GGYKZQrPkzcwdvL+ii0u6blhEbAJsV++2/YAgM2+LiJVUr4V/ULd1jKJGg35EfJpqiP4x8z5leXJ9/Iom65MkDZ7hXZIkjbEtW7bv7KL8bNDfYjDNKaPpHv3DqAL9P847/hVgHfBYqlcOSJKGxOAuSZI6GeJkfHsB1zd4+01atld3UX5Vvd60wTYUN6ih+wv9nSj190SSps52WxreJUnSRLi+j2fw27mnZXujLsrP/lJ1d4NtKK7poH8H1RCH+wM/afjekjQ1DO6SJGmoJuf9ene0bHczHH/zet3NMP+R1XTQvxjYEzgmIr6dmfP/42TD9UnSWDC4S5IklZeZ90TELcC2wE7tykbEctYH/asH3bZBajrof4zqmYpnA7dGxA3Ampbz50bEmgWvXFxm5i5NNVCSmmJ4lyRJGgsXAU8Cdo2IDdq8Ym+3lu2fDr5Zg9N00H838ETg+fW9d2w5F/P2u+UoAElFGNwlSZIqUX+VqmvAzqcK+psDjwO+tUi5A1q2Lxh0owap0aCfmeuAP4qIxwNPowr2GwMvoQrsZwO3N1mnJLVjeJckSZp6ZwKvr7ePZIGgHxEzwIvr3dup3hw3tgYy635mXghcOLsfES+pN9+Qmb5eT1LfDO6SJEkFBMRkTMZHZn47Ir5O1at/VEScUmfWVscCu9fbJ2TmnEfOI+JA1of/UzLziAE2eckG9Xo9SeqKwV2SJEkFHEM1HH9Tqrnj3kIV3DcFXgC8rC53CXB8v5VExBHzDv1uy/YzImLnlv3LMvP8futqp0jQz8yZEvVIGg3bbdnNK0olSZI0qibn7XqVzPxeRBwOnAZsBbxlgWKXAAdn5h0LnOvWSW3OvW7e/ilU8wc0zh59SR0Z3CVJkjTuMvMzEfFYqt79g6let7cauAz4L+A9mXnXEJvYGIO+NKUM75IkSZo2mfkL4G/qpZfrvkoXgw8ys9RAiLYaDfoR8eV6MzPzqQsc78ece0lamMFdkiRJjZm0sftTpuke/QPrdS5wPOntj3C2/Px7SVPB4C5JkiSpH00H/a+xcDBf7Lg0VQzvkiRJGgdRf5WqS81qNOhn5oG9HJfGncFdkiRJ0qhxMj6phcFdkiRJgohqKVWXmmXQ18TbdgvDuyRJkqTpYdDX2DG4S5IkSdLimn693oObvN+szLxqEPfV6NjG8C5JkiSNDN+uN96a7tG/ouH7QTVbvyMPxozBXZIkSZKGo+kA7YcxE8rgLkmSJE0Ru/THWtNB/8gO5/8C2AtYA5wLfBu4oT53//rcQcCGwHeA/2i4fWpheJckSZKkydNo0M/MUxY7FxEnAntSBfyjMvPaRcrtCHwQ+H3gSZl5dJNtnGRbb76R4V2SJEmSplyRZ98j4vlUvf0rgIMz897FymbmtRFxCHAhcGREnJuZp5dopyRJkiQBLH/2O/u6Lu+5veGWDEfUX6XqUrNKTXL3cqpJ9d7ZLuTPysx7I+J44OPAywCDviRJkqSu9BvSpUlRKug/tl5f0sM1s2V/u+G2SJIkSRpBBvTREVEtpepSs0oF/S3r9fY9XDNbdsu2pSRJkiQN3fJnvq2/C5dt2GxDJBUL+r8AHgG8GPhCl9e8uF5fNZAWSZIkSeo/oGui+Xa98VYq6J8F/C3wgoj4QWa+vV3hiHgN8EKq5/rPKNA+SZIkaewY0iUtpFTQfyvwp8AOwL9GxAuBU6hm4b+RKtDfH9irLve79XXXA/70kiRJ0kRZ/vR/7v/iDXydsqT2igT9zLw9Ip5GNWx/J6rJ+Y5vc0kA1wDPyMzJeD+FJEmSJsKSQro0Lhy7P9ZK9eiTmT+NiEcD/wS8FFi+SNHbgJOAN2Xmr0u1T5IkSZNt+VOOg2XLht0MSRq4YkEfIDPvAF4bEX8PPI7q1Xnb1KdvA34EfDczV5dslyRJkkbb8qccN+wmSFMl6q9SdalZRYP+rMxcA3yzXiRJkjTBDOmSVNZQgr4kSZJG3/ID3rDwCd97Lk2+gPAZ/bFl0JckSZpAi4Z0SdLEM+hLkiSNEAO6JGmpDPqSJEkNWb7/3/d+UbGxsZLUPd+uN94M+pIkaer1FdAlSRpRBn1JkjTWlj/p7+YeiJnhNESSJo1d7WPLoC9JkobiPgFdkiQ1wqAvSZJ6ZkiXpMkW9VeputQsg74kSVNk+X6vW9oNnDhOkqSRZ9CXJGlMLDmkS5KkqWDQlyRpwAzokqRxE1FuEJeDxZpn0JckqQ1DuiRJGjcGfUnSROpqsrjMwTdEkqQxFJR7u54d+s0z6C9RRHT7W+J5mXngINsiSZPCGd0lSZL6Z9CXJDVm+f5/v/jJXFeuIZIkaWns0h9rBv3mvA/4jzbnV5ZqiCT1o21IlyRJ0tgw6Dfnxsz88bAbIWn6LD/wHxc/ue7ecg2RJEnSSDDoS9IQtQ3pkiRJQxL1V6m61CyDviT1YflTjmtfwJ50SZIkDYlBX9LU6RjSJUmSplxEtZSqS80y6DfnDyPij4CdgXuB64FvACdn5leG2TBpkiw/6M3dFVy7ZrANkSRJkkaUQb85j5q3v2u9vDgizgSOyMxf9XrTiNipQ5Eder2nNAxdB3RJkiRJS2LQX7q7gLOBLwEXA3cC9wMOAP4c2BY4DDgrIp6emb12M17dYFulvix/1jv6u3Dt6mYbIkmSpCKCcq+3d+R+8wz6S7djZt6+wPH/jYh3A58D9qAK/q8A/r+SjdN0W/6cE6oNA7ckSZI0NQz6S7RIyJ89d0NEPJ+qp39D4FX0HvQf1OH8DsCKHu+pEfebgC5JkiQNg136Y82gP2CZ+fOI+F/gWcCuEfHAzLyuh+uvaXc+nKJy5Cx/7vvaF7B3XZIkSdIAGfTLuIgq6APsCHQd9FVOx4AuSZIkTYmqQ79Mp6Jdl80z6JeRw27ApNvm8A/3fW2uWdVgSyRJkiRpuAz6ZbS+es/e/Bbbv+jUBY+vXbO2cEskSZIkaTIY9AcsIh4KPL3evTwzrx1me5q0WEiXJEmSNOYCik0H5tj9xhn0lyAiDgE+l5kLdj9HxP2BTwEb1Yf+o1Tb2tnxpR/v+9o1q9c02BJJkiRJUtMM+kvzbmDDiPgUcCFwJXA3sB1wIPDyehvgfOC9g2zMXseeyczm2w6yCkmSJElTwLfrjTeD/tI9EHhVvSzmU8DRmemsb5IkSZKkgTLoL81LgAOAxwMPo+q93wq4E7ga+AZwSmZeOLQWSpIkSVKv7NIfawb9JcjM84Dzht0OSZIkSZJmzQy7AZIkSZIkqTn26EuSJEmS5oj6q1RdapY9+pIkSZIkTRB79CVJkiRJc0RUS6m61Cx79CVJkiRJmiD26EuSJEmS5vDteuPNHn1JkiRJkiaIQV+SJEmSpAni0H1JkiRJ0lyO3R9r9uhLkiRJkjRB7NGXJEmSJM0R9VeputQse/QlSZIkSZogBn1JkiRJkiaIQ/clSZIkSXMEEIVG1Dtwv3n26EuSJEmSNEHs0ZckSZIkzeHb9cabPfqSJEmSJE0Qe/QlSZIkaYn+76SXA3D9ddfylD3/ecitWbqIgs/o26XfOIO+JEmSpLE0G64lzWXQlyRJktS1iz5+TKP3u2fNvY3eT5JBX5IkSRppl53xujn7q9euG1JLNF2cjm+cGfQlSZKkeeaHa0kaJwZ9SZIkjYSrPvsPA6/D3nCpSwUn47NDv3kGfUmSpCn2yy++qedr1tybA2iJJKkpBn1JkqTCbvzKv/xm+951hmZJo8cn9MebQV+SJE2F1nAtSdIkM+hLkqSBueVr/1q8TnvIJUnTzqAvSdKEue38tw3s3uvSEC1J0yAKTsZXbNK/KWLQlySpAYMM15IkSb0w6EuSxtatX3vrkq63B0GSpIVF/VWqLjXLoC9J6sktX31zX9eFqVqSJKkIg74kjbgbv/TGvq9dZriWJEn98P16Y82gL0kLuO7z/7ik6zdY5r9YkiRJGg6DvqSRcdVZr2vsXgZtSZIkTSuDvjTlLv3kMQO798YbzAzs3pIkSRocR+6PN4O+NAQ/PuVlRevbeINlReuTJEmSNDwGfU2N849//oLHN9mobAjeeEN7uSVJkjTaIsq9hta5g5tn0NdAnfOmQ/q6bvPC4VuSJEmSJoVBfwJ9+LVPHti9t9l444HdW5IkSdJoiPqrVF1qlkF/gvzbnz+B7XZ44LCbIUmSJEkaIh8WliRJkiRpgtijL0mSJEmay/frjTV79CVJkiRJmiD26EuSJEmS5rBDf7zZoy9JkiRJ0gQx6EuSJEmSNEEcui9JkiRJmiOiWkrVpWbZoy9JkiRJ0gSxR1+SJEmSNE8QTsc3tuzRlyRJkiRpgtijL0mSJEmaw2f0x5s9+pIkSZIkTRCDviRJkiRJE8SgL0mSJEnSBDHoS5IkSZI0QZyMT5IkSZI0R1BwMr4y1UwVe/QlSZIkSZog9uhLkiRJkuaI+qtUXWqWPfqSJEmSJE0Qg74kSZIkSRPEofuSJEmSpDkiCk7G58j9xtmjL0mSJEnSBLFHX5IkSZI0R1DutXd26DfPHn1JkiRJkiaIPfqSJEmSpLns0h9r9uhLkiRJkjRBDPqSJEmSJE0Qh+5LkiRJkuaI+qtUXWqWPfqSJEmSJE0Qe/QlSZIkSXNEVEuputQse/QlSZIkSZogBv0GRcRDIuL4iLg4IlZGxK0RsSIiXhsRmw27fZIkSZI0zUpltoh4ZkScERHXRMSqen1GRDyzqTraceh+QyLiEOA0YKuWw5sBe9bL0RFxcGZeNoz2SZIkSVK3gnKvty9WT4HMFhEzwAeAo+ad2rFeDouIDwEvz8x1/dbTiT36DYiIPYBPUv2FuRN4A/AE4KnAB+tijwDOiYgth9JISZIkSZpSBTPbm1kf8r8HvBDYu15/rz5+NPAvS6ijI3v0m3ECsCmwFjgoMy9sOffliLgUeDvVX5xjgeOKt1CSJEmSujV5XfoDz2wR8QjgNfXud4D9M/Puen9FRJwNnEc1euC1EfHhQY34tkd/iSJib+BJ9e6J8/7CzDoe+Gm9fUxEbFikcZIkSZI05Qpmtr9mfWf6q1pCPgCZeRfwqnp3A+DVfdTRFYP+0h3Wsn3SQgXqZy9OrXe3Bp486EZJkiRJUv+i2FeBLv2BZ7aICODQevfizPzmIvV8E/hZvXtofV3jDPpLt1+9Xgl8t02581q2nzi45kiSJEmSWpTIbA8FHrjAfdrVsyOwc4/1dMVn9Jdu93p9WWaubVPu4gWu6SgidupQZMfZjVtvuqHb2/Zt7cYbDbwOgM02XFakHoCNC9YFsNGGpR52Wm/jZWW/x1kbbTC8zxKXLSv/37nVBjPDrX/WssF8SNyfUWpLbQSbNPIyc9hN6OjedaPfxlbj1l6AtWPY5lmr1w5skuti1tw7/t9Dq1VrJuv7uemG61t3h/NLWAOuv/6Xw6prh06d3Jl5TY9VDDSz1R61yH26qeeKHuvqyKC/BBGxCbBdvdv2L1tm3hYRK4HNgQf1UM3V3Rb82z95Vg+3lSRJkjRg9wN+MexG9GP/J+w9rKpXdFGm64/qC2U2gNYO2k4fRLRmvF7r6YpD95em9bULd3ZRfmW93mIAbZEkSZI0WrYfdgNULLP1Us/Klu2BZEN79Jdmk5bt1V2UX1WvN+2hjk6f8DwYuKDe3he4tod7S5JGxw6s78XYC7i+TVlJ0ujaEZidiK3TEO5Rcz0D6mHu0g7ATcC9Dd6zRGbrtZ5VLdu91tMVg/7S3NOy3c3D6xvX67vblmrR6fmTec+vXNvH8yqSpBEw7+f59f48l6TxNO/neTfBcmTUz68P89+fQdQ98MzWRz0bt2z3Wk9XHLq/NHe0bHcz5GLzet3NkBFJkiRJ0tKUymy91LN5y/ZAsqFBfwky8x7glnq37ez4EbGc9X+gXU+wJ0mSJEnqT8HM1joaodOb01ofjxhINjToL91F9XrXiGj3KMRuLds/HWB7JEmSJEnrlchsF7Vs77ZoqaXX0xWD/tKdX683Bx7XptwBLdsXLFpKkiRJktSkEpntCuC6Be6zkP3r9bXAlT3W0xWD/tKd2bJ95EIFImIGeHG9ezvwlUE3SpIkSZIEFMhsmZnAWfXubhGx7yL17Mv6Hv2z6usaZ9Bfosz8NvD1eveoiHj8AsWOBXavt0/IzDVFGidJkiRJU66JzBYRB0ZE1svJi1T176x/NeC7I2LOq/Pq/XfXu2vr8gNh0G/GMVSvRdgAODciXh8R+0bEkyPi/cDb63KXAMcPq5GSJEmSNKUGntky8xLgHfXunsAFEXF4ROwZEYdTPQ6wZ33+HZl5ab/fTCcxoJECUyciDgFOA7ZapMglwMGZeVm5VkmSJEmSYGmZLSIOZP1w/lMy84hF6pgBPgi8tE1TTgRelpnrumt57+zRb0hmfgZ4LPAuqr8gd1E92/Ed4HXAHoZ8SZIkSRqOEpktM9dl5lHAwVTP7F8HrK7XZwHPysyjBxnywR59SZIkSZImij36kiRJkiRNEIO+JEmSJEkTxKAvSZIkSdIEMehLkiRJkjRBDPqSJEmSJE0Qg74kSZIkSRPEoC9JkiRJ0gQx6EuSJEmSNEEM+iMiIh4SEcdHxMURsTIibo2IFRHx2ojYbEB1bhYRP4+IrJcrB1GPJE2TQf48j4gjWn5md1qOaOhbkqSpVPL384h4WkScHBGX1XX9KgReTUgAABYsSURBVCIuiYj/johXRMQWTdanyReZOew2TL2IOAQ4DdhqkSKXAAdn5mUN1/tvwLEth36RmTs3WYckTZNB/zyvw/tJXRY/MjNP7qceSZp2pX4/j4jlVD/XD+1QdI/M/P5S6tJ0+f/bu/dwSYryAOPvx/2iqAQE44VFiMQLKgIqgYUVg4pXokHRgBKRCIGIRBPvSIwaBI0XvEUxoAR5jCgEozFKZDEgREUwCAiiAgIaWIEVhOXmlz+qmtM7OzNn5lxmdue8v+fpp7unarqq9xyK83V1Va0z7gosdBGxA/AFYEPgduAfgLPr+X7AwcBjgK9GxE6Zedsclvt6YAVwD/DAubiuJC1UY2jPnw3c0Cf9ulleX5IWpFG15xHxIOCbwI71o9OB04CfAvcBjwT2AF4y45vRgmWgP34fpjQa9wLPyszzW2nfioifAMdSGpM3AEfPtsCIWBv4NLA28HfAQRjoS9Jsjbo9vzIzr57lNSRJqxpVe348Jci/C3hpZp7Zkf594PSIOJLyd7s0MMfoj1FEPBVYXE8/09GIND4AXF6Pj4iIdeeg6CMojcoVwPvm4HqStKCNsT2XJM2hUbXnEbEbcEA9fXuXIP9+Wdw7bBla2Az0x2uf1nHXMZeZ+Tvgc/X0wcAzZlNgRGwFvKueHpKZd8/mepIkYAztuSRpXoyqPT+87pcDH53B96W+DPTHa7e6/y1wYZ9857SOd51lmR8HNgZOzsyls7yWJKkYR3suSZp7896eR8R6TE2+983MXFE/XzsiHhkRiyJig2GuKXUy0B+vx9b9VdO8jvPjLt8ZWkTsBzwXuIWVZ9uXJM3OSNvz6sSIuCEi7o6IZRFxQUS8OyIePsvrStJCNor2/ElAE8hfEhGbRMSHgGXAtcDPgeUR8c2IWDLktSXAQH9s6lO6zepp35mRM/MWylNFKLNvzqS8hwAfqqdvzsybZnIdSdLKRt2etywBHgasC/we8DTgbcBVEfHaWV5bkhacEbbnj2sdr0WZdO8IyjCAxnrAH1Mm/3vTkNeXDPTHqD3L/e0D5G8akgfMsLzjgC2A8ykz7kuS5sao2/OfAe+nLLf01LrtB3wRSEov0Scj4i9meH1JWqhG1Z5v2jp+E/AHwNcp7fkGwEOBQynj9wM4JiJe1HkRqR+X1xuf9ribQSbEu6vuNxy2oIjYHXg1ZYmQQzIzh72GJKmnkbXnlDWWP9ulHf8e8IWIeD7wZUov/wcj4szM/NUMypGkhWhU7fnGHWV+E3h+Zt5XP7uJ8sD2R5S5ANYC/qG26f4dr4HYoz8+K1rH6w2Qf/26v3OYQiJifeBTlKeBH87M/x3m+5KkaY2kPQfIzOX9/sjLzH9namWVjYCDhi1DkhawUbXnKzrO39QK8u+XmedSHt5CmQdg+yHL0QJmoD8+t7WOB3ndp3nyN8hrRG1vA7YDfgG8c8jvSpKmN6r2fFCforzCD7DHPJUhSZNoVO15u5ybMvOiPnn/s3W885DlaAHz1f0xycwVEfFrygRKj+iXt06k1zQkvxiyqGbyjrOAF0REtzzNtTeuM/MD3JiZ3xqyLElacEbYng9anxtrfTYDnIFfkgY0wva8nb/vpH8deTcfshwtYAb643UZsBjYNiLW6bOExx+2ji8fsozmtaM/r1s/mwGn1uNzAAN9SRrMKNrzYTiGU5JmZhTt+aWt47WnydtO77fcn7QSX90fr3PrfmNgxz752q9enjd/1ZEkzdBq055HxOZMLQ91w3yUIUkTbN7b88y8Bri2ni6KHq/cVtu0jq8fphwtbAb643VG67hrb3tErAW8sp7eCpw9TAGZGdNtwDU1+zWtz5cMeS+StJDNe3s+hL+gTMAK5e0sSdLgRtWef6nuNwGe2Sffi1vH5/bMJXUw0B+jzPwu8N/19KCI2KVLtjdQZtmEMmv+Pe3EiFgSEVm3k+avtpKkXkbRnkfEoojYoV896vJ6R9XTO4ETh7gNSVrwRvj3+YeYmn3/HyNik84MEbE/sKSefjUz52VuF00mx+iP3xGU1302BL4REe+lPBXcENiP0jMDcCXwgbHUUJI0iPluzxcBZ0fE+cBXgB8CN9a0RwN/WremN/+NmelrnpI0vHn/+zwzr42Io4BjKcvmfTci3gf8L6WX/8XAoTX7b4AjZ3YrWqgM9McsMy+KiJcB/0L5j/q9XbJdCTwvM2/rkiZJWg2MsD3fpW693AEcmZmfmkUZkrRgjao9z8zjImJTyipZ2wH/3CXbjcA+mfmTmZajhclAfzWQmV+JiCdSnh4+j7Kcx93AVcAXgY9m5h1jrKIkaQDz3J5fCOxPCfJ3Ah5GmXRvHeAWyizO/wWckJk39rqIJGl6o/r7PDPfEhFnUnrvF1Pa9hWUBwlnAsdn5vLZlqOFJzJdgUeSJEmSpEnhZHySJEmSJE0QA31JkiRJkiaIgb4kSZIkSRPEQF+SJEmSpAlioC9JkiRJ0gQx0JckSZIkaYIY6EuSJEmSNEEM9CVJkiRJmiAG+pIkSZIkTRADfUmSJEmSJoiBviRJkiRJE8RAX5IkSZKkCWKgL0mSJEnSBDHQlyRJkiRpghjoS5IkSZI0QQz0JUmSJEmaIAb6kqSJFxFLIiLrtmTc9VmdRMTRzb/NiMt9dS33koiIUZY9HyLiY/V+PjvuukiSZKAvSZJGKiIeALy3nr4rM0f6kGGevA+4GzggInYcd2UkSQubgb4kSRNmDXiD4XXAFsBlwGljrsucyMxrgc8CAfz9mKsjSVrgDPQlSdLIRMSGwF/X0w9OSG9+4wN1v7e9+pKkcTLQlyRJo7Q/8HvAXUxIb34jM68AflBP/2qcdZEkLWwG+pIkaZQOqvuvZuatY63J/Dil7veNiAeOtSaSpAXLQF+S1mAR8e91HPYFPdLbY7VvjohV2v2I2LKV55COtLUiYs+IeH9EnBcRyyLinoi4NSIurp8/qkfZu7eue/AA9/KWVv7H9cjzlIj4ZERcERG3R8Rv6/EnIuIx05UxiIjYJyK+GBHXRsSKeq/fj4h3RsRD+nzvpFr3q+v5gyPiXRFxaa3nrRHx7Yj4swHr8YKI+HpE3BQRd0TElRFxXERsWdOvruWd1PrOojp7/tmtS53d+ndttgP7lLtBRPxNRPwgIm6r23cj4vCIWGeQuve59lbA0+rpl/rkO7BV10V98i3qd09dfiZb1t/ZK+u/6fUR8a8R8fgu1/1IzXdnRPxfRJwSEdsMcJvNfW0EvGiA/JIkzblZ/Q9bkjR25wDPA3aMiAdk5u0d6Xu0jh8CPBG4uE+epR1pRwHv7FLug4An1e3QiNg/M0/vyPPfwLXAo4BXAJ/ufyu8ou4vzszL2gn1AcX7gddTJjtre0zdXhMRh2Xmp6Ypp6saxJ8G7NmRtD6wY93+MiJelJldH6y0rrUd8HVgUUfSYmBxROySmYf3+f7HgL/s+PgPgDcC+0fEc6e5nRmJiC0o9X5yR9LOdXtWROyTmb+bYRFLWsd9/w3nWkQ8iXJvW7Y+3hDYF3huRDwnM8+NiD2BL1N+xxsbUH4/946IxZl5aa9yMvOaiPhVLWdv4F/m+FYkSZqWPfqStGZbWvfrALt1SV8yzXn7s//LzB93pK0D/BL4OHAAsCsl4N0HOBa4ndJz+fmIeGz7i3WStVPr6e4R8fBeNxERTwSeUE9P6ZLleOBISpD/beDVtd5PBQ4GLq11/aeIeGGvcvqUvz5wFiXIvw84GXg58HRKcP424NfAQ4Gv1Z7pXjYCvkIZh/7uWs+daj2vq3kOi4hn96jL3zIV5P8COIzSC7478B5KAHpaLafT9cD2lH+fxqvrZ+3tjB51/zLwOOAjwF6Un/UrgMtr+gvqfczU4rr/dWb+bBbXGdZGwOnAesBbKb/HTweOpiyJtzFwckRsS/m3uQ04oubZDfggkJSHZZ8ZoLzv1v0efXNJkjRfMtPNzc3NbQ3dgLWB31CCkGM60tYH7qxpZ9b9GV2ucVlN+0KXtEXAun3KfwQleE3g5C7p29e0BN7Y5zrH1Dz3AQ/vSNurdY2Denx/A+C/ap6rgXU60pe0rrGky/ffU9NuAXbsUcZWwA013yld0k9qlXEr8PguebZt/Uz+rUv6lq30nwCbdcnzR5SJ7JqyTuqSp+/9duQ9upX37h7/PpsCv6p5fjiL39fmd+2safId2KrToj75FrXyHTjNz+QmYJsueQ5r5bkRuBLYvEu+Y1v5dpim/ke18m4x038vNzc3Nze3mW726EvSGiwz7wPOradLOpKfRgmAl1N6JKH0rN/f9kfEQ4GmJ/6cLte/OjPv6VP+dcBx9fSFEREd6ZcAl9TTrmPT63de3tQhM6/vyPLmuv9SZnbtTc3MFUDzKvxWwDN61blL+Q+gBHsA78jMC3uUcQ1T66PvGxEb97nsO7LL692ZeRVTvend3sB4FeVnBvD6zFzW5RrfAT7Wp+zZOD4zl3Yp82bgxHq6fUQ8qDPPgB5R9zfO8Puz8Y7M/GmXz/8ZWFGPNwdel5k3dcn3idbx4i7pbe37e/TgVZQkaW4Y6EvSmq8J0HesQWujeW34XOA7lJ7iZpx+Zx5YdXz+KiJik4jYOiIeHxFPiIgnAHfU5E2Arbt8rXkV/8mdr/dXu1HG8bfz3l8eUw8w+i7FlpmXA01gvEvfG1nZHkyNx55uubdv1/26lNfau1YF+HyfazQPEjaNiAd3pP1x3S8D/qPPNT7Xr5Kz0G3YRKOpd9D959xXHR7RzEJ/y7Dfn6UE/rVrQuadlLcnoNTrP3vk+znllX6YPni/uXW8Zc9ckiTNEwN9SVrzLa37znH6S5r0zLyLqcnPlnTJc1N2TIDXiIitIuL4OnP5cuBnwI8oPfWXAO3J7zbrcolTKYEWdO/Vbybhu4tVZ2Lfgan/V53aZfb4lbZW+cMEVzu1jn85zfV/1Mrbq4xlmfnrPuW1g8DO5deaeQouzv4T3l1Cec1+rnXO0dDWr96D2LR1POpAf1l9K6GXZpm/qzIzB8g33f2376/fmx+SJM0LA31JWvNdSJkUD2rgHhHrMdWrvbRjv6T13aZHf5XX9ut19qaMqz6c8kr8dDbs/CAzr6XMwA9TQX1z/XUps55D93XVHzpAmd10m6iul7ku444enzfaAfzaHWnN8n3dXh2/Xx2y0S9wnZHM7Ff3fvUexIrW8Sq/J/Ns0J/JoPmmu//2/fUc+iJJ0nxxeT1JWsNl5r0RcR7wbKaC+J0pwcZy4KL6WRPMN+P0N6XMsN5Ou19EbEZ5BX0jyoOE91Nea/4psDwz76759qRMhAerLn3XOIUya/zWdWm58+vnz6bMTt/k6dQOqF5LGYIwiGF6jNtlPIXBA7Prps+illuBeyl/e2w6Td41Xfv+Oh9eSZI07wz0JWkynEMJmptx+kvq5+fW3l8or+6vYGqc/jZMBeZLu1zzT4FmDPmfZOZZPcoeJGj7ImWJvPUor+83gX7Tw78c+GqX77Vfgb8jM3/UJc9stcu4qU4wOC63UIYEbN4vU0SszVTv/xohMzMillHub5i693p4BOX3aXXUvr9rx1YLSdKC5av7kjQZltZ9M05/j47P6TJOv8mzjLIOfafH1/3NfYJ8WHmMe1eZeQtTk8u9NCLWqbPWv6h+dlqtX6eLmRrfv+t05czQRa3j+SpjUM3P4cnt1RG62J6yfGIv/caZj1OzAsNjhvhOv/kWHjaLusyn5v7uAq4aZ0UkSQuTgb4kTYbvA7+tx3tR1lqHVXvqm/MlTPX6f7vHBGTNW18b9Ao6I2Ij4IAB69i8mr95reM+TI1z7zrbe13mrHk48YqI6NvTPUNnMTU2+3WdSwSOWDMEYjNg7z75XjnNddrj4fs9EBi1Zq6G7SJi0An9ntgnbc9Z1me+7Fz3F/VbnlKSpPlioC9JE6AGE8349YMoM323x+c3mrH4ezI1w3vXifiYWnJsI+ClnYn19fETgN8fsJpfAX5Tj/+Mqdf2r+9TB4B31/0mwGldlqRr12n9iDgsIjboladTnQDwo/X0j4AP9utNj4gtIuI1g15/SJ+l9AIDfKjOk9BZ/i7AYdNc55et423mqG5zoQn012KAN0GqN9cHSiuJiK2B17U+Wi0eaNRlBJuHE98YZ10kSQuXgb4kTY4mWG7WhG+Pz29cQAkkH0j/8flQ1h1vgs4TI+KYiHhmROwUEa8C/gd4OXDeIJXLzBXAl+vpPpRefYBT+y0ll5lfAz5cT3cHLo+Id9a6PDkido2IV0XECZQA96MMPwfNUfV+AI4AflAfGOxay3hGRBweEWdQxlwfMuT1B5KZNwB/V0+3BS6MiEMjYueI2C0i/p7S638DUzPzr/I2Rl3poJlr4I0R8cKI2C4itq3bTJbHmwvfYarezxzwO1sB50fEARHxlIjYJSL+hvK7/CCm7v8lEfGsiNh2bqs8tN2Bdevx6eOsiCRp4XIyPkmaHEunOSczV0TEBUyNz7+ZqXHTnXmvi4hDKb32GwBvqlvbF4BPU15/H8QpwIGsvLZ419f2OxxZ6/oOypjto/vk/S3Q+YCjr8y8KyL2Ak4CXgw8iale/m5+0ydtto6hBLevBR4FfLwjfRllScLmockKuntv/e7WwL91pP055V5HKjPvjojPAW+gPCR6+wBfOw74W+BzXdLeDjwfeDrlwdFewDMY77j45k2VSzPz4jHWQ5K0gNmjL0mT43usvA740h752p/3Gp8PQGaeCCwGzqD0xN5D6TX/OvCyzNyP4YLqb7Hya+WXDRIMZfEuyiRnx1LmJLi5ln0bcBnlgcGrgIdl5p1D1Kkp47bMfAnlfk8ArqjXvreW9T3gY8BzmXobYc7Vez2EMlHhN2rZKyjB60eAHTLz+5ShDFCGaHS7zieAl9Rr3FjvY3Xw6bp/dEQ8fYD8n6A8fDmP8vO4nbJqw76Z+R7gr4Af18+/xhiD/Dpk5MX1tPMBjSRJIxN9/r6TJEmroYh4BPCLevqazPzMOOszrIj4GmWywRMy8+Au6QcCJ9bTrTPz6tHVbuYiYn/gZMqSjYsy8/YxV0mStEDZoy9J0prn5a3jC3rmWn29Bfgd8MqIeOS4KzMX6gSOb62nxxnkS5LGyUBfkqTVSERsHBE914ePiB0ocxUAXJiZl46mZnMnM38IfB5YjxL0T4J9gcdSJmv8yJjrIkla4JyMT5Kk1cvmlJUFzqDMhXAFZfWD3weeQ1k+cUPKbPN/Pa5KzoG3Aj8FVkRE9JsrYg2xNmXFhG/NZI4ISZLmkmP0JUlajUTEIuDn02S7Gzg4M7vNRL/GW1PH6EuStLqwR1+SpNXL9cDLKL33O1N6+DelrKhwNWUpw+Mz85pxVVCSJK3e7NGXJEmSJGmCOBmfJEmSJEkTxEBfkiRJkqQJYqAvSZIkSdIEMdCXJEmSJGmCGOhLkiRJkjRBDPQlSZIkSZogBvqSJEmSJE0QA31JkiRJkiaIgb4kSZIkSRPEQF+SJEmSpAlioC9JkiRJ0gQx0JckSZIkaYIY6EuSJEmSNEEM9CVJkiRJmiAG+pIkSZIkTRADfUmSJEmSJoiBviRJkiRJE8RAX5IkSZKkCWKgL0mSJEnSBPl/J2NHSJ1xfjUAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 1200x800 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(dpi=200)\n",
    "plt.pcolormesh(np.reshape(mode_wvl,(nmode,nfreq)),\n",
    "               np.reshape(mode_angle,(nmode,nfreq)),\n",
    "               np.reshape(mode_tran,(nmode,nfreq)),\n",
    "               cmap='Blues',\n",
    "               shading='flat',\n",
    "               vmin=0,\n",
    "               vmax=tran_max)\n",
    "plt.axis([min(mode_wvl), max(mode_wvl), min(mode_angle), max(mode_angle)])\n",
    "plt.xlabel(\"wavelength (μm)\")\n",
    "plt.ylabel(\"diffraction angle (degrees)\")\n",
    "plt.xticks([t for t in np.linspace(wvl_min,wvl_max,3)])\n",
    "plt.yticks([t for t in range(0,35,5)])\n",
    "plt.title(\"transmittance of diffraction orders\")\n",
    "cbar = plt.colorbar()\n",
    "cbar.set_ticks([t for t in np.arange(0,tran_max+0.1,0.1)])\n",
    "cbar.set_ticklabels([\"{:.1f}\".format(t) for t in np.arange(0,tran_max+0.1,0.1)])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Each diffraction order corresponds to a single angle. In the figure, this angle is represented by the *lower* boundary of each labeled region. For example, the $m$=0 order has a diffraction angle of 0° at all wavelengths. The representation of the diffraction orders as finite angular regions is an artifact of matplotlib's [pcolormesh](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.pcolormesh.html) routine. Note that only the positive diffraction orders are shown as these are equivalent to the negative orders due to the symmetry of the source and the structure. The transmittance of each diffraction order should ideally be a constant for all wavelengths. The slight wavelength dependence shown in the figure is due to numerical discretization which can be mitigated by increasing the resolution.\n",
    "\n",
    "The diffraction orders/modes are a finite set of propagating planewaves. The wavevector $k_x$ of these modes can be computed analytically: for a frequency of $ω$ (in $c$=1 units), these propagating modes are the **real** solutions of sqrt(ω²n²-($k_y$+2π$m$/$Λ$)²) where $m$ is the diffraction order (an integer), $Λ$ is the periodicity of the grating, and $n$ is the refractive index of the propagating medium. In this example, $n$=1, $k_y$=0, and $Λ$=10 μm. Thus, at a wavelength of 0.5 μm there are a total of 20 diffraction orders of which we only computed the first 10. The wavevector $k_x$ is used to compute the angle of the diffraction order as cos<sup>-1</sup>($k_x$/($ωn$)). Evanescent modes, those with an imaginary k<sub>x</sub>, exist for |$m$|>20 but these modes carry no power. Note that currently Meep does not compute the number of propagating modes for you. If the mode number passed to `get_eigenmode_coefficients` is larger than the number of propagating modes at a given frequency/wavelength, MPB's Newton solver will fail to converge and will return zero for the mode\\ coefficient. It is therefore a good idea to know beforehand the number of propagating modes.\n",
    "\n",
    "In the limit where the grating periodicity is much larger than the wavelength and the size of the diffracting element (i.e., more than 10 times), as it is in this example, the [diffraction efficiency](https://en.wikipedia.org/wiki/Diffraction_efficiency) can be computed analytically using scalar theory. This is described in the OpenCourseWare [Optics course](https://ocw.mit.edu/courses/mechanical-engineering/2-71-optics-spring-2009/) in the Lecture 16 (Gratings: Amplitude and Phase, Sinusoidal and Binary) [notes](https://ocw.mit.edu/courses/mechanical-engineering/2-71-optics-spring-2009/video-lectures/lecture-16-gratings-amplitude-and-phase-sinusoidal-and-binary/MIT2_71S09_lec16.pdf) and [video](https://www.youtube.com/watch?v=JmWguqCZRxk). For a review of scalar diffraction theory, see Chapter 3 (\"Analysis of Two-Dimensional Signals and Systems\") of [Introduction to Fourier Optics (fourth edition)](https://www.amazon.com/Introduction-Fourier-Optics-Joseph-Goodman-ebook/dp/B076TBP48F) by J.W. Goodman. From the scalar theory, the diffraction efficiency of the binary grating is 4/(mπ)<sup>2</sup> when the phase difference between the propagating distance in the glass relative to the same distance in air is π. The phase difference/contrast is (2π/λ)(n-1)s where λ is the wavelength, n is the refractive index of the grating, and s is the propagation distance in the grating (`gh` in the script). A special feature of the binary grating is that the diffraction efficiency is 0 for all *even* orders. This is verified by the diffraction spectrum shown above. Also, since the diffraction efficiency of the ninth order has already fallen to a negligible value (~0.005), computing the spectra of higher-order modes is unnecessary.\n",
    "\n",
    "To convert the diffraction efficiency into transmittance in the $x$ direction (in order to be able to compare the scalar-theory results with those from Meep), the diffraction efficiency must be multiplied by the Fresnel transmittance from air to glass and by the cosine of the diffraction angle. We compare the analytic and simulated results at a wavelength of 0.5 μm for diffraction orders 1 (2.9°), 3 (8.6°), 5 (14.5°), and 7 (20.5°). The analytic results are 0.3886, 0.0427, 0.0151, and 0.0074. The Meep results are 0.3891, 0.04287, 0.0152, and 0.0076. This corresponds to relative errors of approximately 1.3%, 0.4%, 0.8%, and 2.1% which indicates good agreement.\n",
    "\n",
    "Finally, by investigating the transmittance of the zeroth order (at a wavelength of 0.5 μm) in the limit as the grating periodicity approaches zero, we can demonstrate the breakdown of the scalar theory in the wavelength-scale regime which can only be solved using a full-wave method. When the periodicity is much less than the wavelength (i.e., subwavelength), the transmittance can again be solved analytically using effective-medium theory involving a three-layer structure: a layer of the averaged ε (mean or harmonic mean depending on the polarization $E_z$ or $H_z$) sandwiched between the glass substrate and air. Results are shown in the following figure.\n",
    "\n",
    "![](https://meep.readthedocs.io/en/latest/images/grating_0th_order_tran.png)\n",
    "\n",
    "Starting around a grating periodicity of 1.0 μm, the transmittance is no longer zero and increases rapidly with decreasing periodicity. As shown in the inset, for periodicities less than 0.5 μm, the transmittance converges to its asymptotic limit determined by the effective-medium theory: 0.99744 for the $E_z$ and 0.99057 for the $H_z$ polarization. The weak polarization dependence is due to the low index contrast. The oscillations in the data are real and *not* an artifact of the discretization.\n",
    "\n",
    "Now let's try using a dispersive medium instead of an ideal, constant refractive index:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-----------\n",
      "Initializing structure...\n",
      "field decay(t = 50.01): 0.11139427530016409 / 0.11139427530016409 = 1.0\n",
      "field decay(t = 100.01): 1.824305440068526e-15 / 0.11139427530016409 = 1.637701250941967e-14\n",
      "run 0 finished at t = 100.01 (10001 timesteps)\n",
      "-----------\n",
      "Initializing structure...\n",
      "     block, center = (-2.25,0,0)\n",
      "          size (4,1e+20,1e+20)\n",
      "          axes (1,0,0), (0,1,0), (0,0,1)\n",
      "     block, center = (0,0,0)\n",
      "          size (0.5,5,1e+20)\n",
      "          axes (1,0,0), (0,1,0), (0,0,1)\n",
      "field decay(t = 50.01): 0.1082498119209954 / 0.1082498119209954 = 1.0\n",
      "field decay(t = 100.01): 7.512926070352665e-06 / 0.1082498119209954 = 6.940359467632024e-05\n",
      "field decay(t = 150.02): 6.732414916367269e-06 / 0.1082498119209954 = 6.219331744687766e-05\n",
      "field decay(t = 200.03): 2.3712635292765586e-06 / 0.1082498119209954 = 2.1905474819736332e-05\n",
      "field decay(t = 250.04): 9.494875348809632e-07 / 0.1082498119209954 = 8.771262675023706e-06\n",
      "field decay(t = 300.04): 3.8220269083178343e-07 / 0.1082498119209954 = 3.530746927400933e-06\n",
      "field decay(t = 350.05): 1.5689447663324306e-07 / 0.1082498119209954 = 1.4493741268368232e-06\n",
      "field decay(t = 400.06): 6.492618040375044e-08 / 0.1082498119209954 = 5.997809996301509e-07\n",
      "field decay(t = 450.07): 2.9338161615346314e-08 / 0.1082498119209954 = 2.710227490903943e-07\n",
      "field decay(t = 500.08): 1.115652431764312e-08 / 0.1082498119209954 = 1.0306275936798441e-07\n",
      "field decay(t = 550.08): 4.421515879496221e-09 / 0.1082498119209954 = 4.084548324872104e-08\n",
      "field decay(t = 600.09): 1.6989786783603636e-09 / 0.1082498119209954 = 1.5694980418075362e-08\n",
      "field decay(t = 650.1): 8.779199940057175e-10 / 0.1082498119209954 = 8.110129509014344e-09\n",
      "field decay(t = 700.11): 2.64630974046326e-10 / 0.1082498119209954 = 2.444632183189964e-09\n",
      "field decay(t = 750.12): 1.5056115102443512e-10 / 0.1082498119209954 = 1.39086755304776e-09\n",
      "field decay(t = 800.13): 6.39132960275918e-11 / 0.1082498119209954 = 5.904240838241642e-10\n",
      "run 0 finished at t = 800.13 (80013 timesteps)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1200x800 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from meep.materials import fused_quartz\n",
    "\n",
    "resolution = 50        # pixels/μm\n",
    "\n",
    "dpml = 1.0             # PML thickness\n",
    "dsub = 3.0             # substrate thickness\n",
    "dpad = 3.0             # padding between grating and PML\n",
    "gp = 10.0              # grating period\n",
    "gh = 0.5               # grating height\n",
    "gdc = 0.5              # grating duty cycle\n",
    "\n",
    "sx = dpml+dsub+gh+dpad+dpml\n",
    "sy = gp\n",
    "\n",
    "cell_size = mp.Vector3(sx,sy,0)\n",
    "pml_layers = [mp.PML(thickness=dpml,direction=mp.X)]\n",
    "\n",
    "wvl_min = 0.4           # min wavelength\n",
    "wvl_max = 0.6           # max wavelength\n",
    "fmin = 1/wvl_max        # min frequency\n",
    "fmax = 1/wvl_min        # max frequency\n",
    "fcen = 0.5*(fmin+fmax)  # center frequency\n",
    "df = fmax-fmin          # frequency width\n",
    "\n",
    "src_pt = mp.Vector3(-0.5*sx+dpml+0.5*dsub)\n",
    "sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=src_pt, size=mp.Vector3(y=sy))]\n",
    "\n",
    "k_point = mp.Vector3(0,0,0)\n",
    "\n",
    "symmetries=[mp.Mirror(mp.Y)]\n",
    "\n",
    "sim = mp.Simulation(resolution=resolution,\n",
    "                    cell_size=cell_size,\n",
    "                    boundary_layers=pml_layers,\n",
    "                    k_point=k_point,\n",
    "                    default_material=fused_quartz,\n",
    "                    sources=sources,\n",
    "                    symmetries=symmetries)\n",
    "\n",
    "nfreq = 21\n",
    "mon_pt = mp.Vector3(0.5*sx-dpml-0.5*dpad)\n",
    "flux_mon = sim.add_flux(fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy)))\n",
    "\n",
    "sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, mon_pt, 1e-9))\n",
    "\n",
    "input_flux = mp.get_fluxes(flux_mon)\n",
    "\n",
    "sim.reset_meep()\n",
    "\n",
    "geometry = [mp.Block(material=fused_quartz, size=mp.Vector3(dpml+dsub,mp.inf,mp.inf), center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub))),\n",
    "            mp.Block(material=fused_quartz, size=mp.Vector3(gh,gdc*gp,mp.inf), center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh))]\n",
    "\n",
    "sim = mp.Simulation(resolution=resolution,\n",
    "                    cell_size=cell_size,\n",
    "                    boundary_layers=pml_layers,\n",
    "                    geometry=geometry,\n",
    "                    k_point=k_point,\n",
    "                    sources=sources,\n",
    "                    symmetries=symmetries)\n",
    "\n",
    "mode_mon = sim.add_flux(fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy)))\n",
    "\n",
    "sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, mon_pt, 1e-9))\n",
    "\n",
    "freqs = mp.get_eigenmode_freqs(mode_mon)\n",
    "\n",
    "nmode = 10\n",
    "res = sim.get_eigenmode_coefficients(mode_mon, range(1,nmode+1), eig_parity=mp.ODD_Z+mp.EVEN_Y)\n",
    "coeffs = res.alpha\n",
    "kdom = res.kdom\n",
    "\n",
    "mode_wvl = []\n",
    "mode_angle = []\n",
    "mode_tran = []\n",
    "\n",
    "for nm in range(nmode):\n",
    "  for nf in range(nfreq):\n",
    "    mode_wvl.append(1/freqs[nf])\n",
    "    mode_angle.append(math.degrees(math.acos(kdom[nm*nfreq+nf].x/freqs[nf])))\n",
    "    tran = abs(coeffs[nm,nf,0])**2/input_flux[nf]\n",
    "    mode_tran.append(0.5*tran if nm != 0 else tran)\n",
    "\n",
    "tran_max = round(max(mode_tran),1)\n",
    "\n",
    "plt.figure(dpi=200)\n",
    "plt.pcolormesh(np.reshape(mode_wvl,(nmode,nfreq)),\n",
    "               np.reshape(mode_angle,(nmode,nfreq)),\n",
    "               np.reshape(mode_tran,(nmode,nfreq)),\n",
    "               cmap='Blues',\n",
    "               shading='flat',\n",
    "               vmin=0,\n",
    "               vmax=tran_max)\n",
    "plt.axis([min(mode_wvl), max(mode_wvl), min(mode_angle), max(mode_angle)])\n",
    "plt.xlabel(\"wavelength (μm)\")\n",
    "plt.ylabel(\"diffraction angle (degrees)\")\n",
    "plt.xticks([t for t in np.linspace(wvl_min,wvl_max,3)])\n",
    "plt.yticks([t for t in range(0,35,5)])\n",
    "plt.title(\"transmittance of diffraction orders\")\n",
    "cbar = plt.colorbar()\n",
    "cbar.set_ticks([t for t in np.arange(0,tran_max+0.1,0.1)])\n",
    "cbar.set_ticklabels([\"{:.1f}\".format(t) for t in np.arange(0,tran_max+0.1,0.1)])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Since fuzed quartz isn't highly dispersive in this range, we don't see much of a difference between the two plots."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.7"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
